Python初學者筆記(二):用白話講「正則表達式」入門(上篇),看不懂算我輸!
正則表達式(Regular Expression),又稱規則表達式。真不知道是哪個大哥翻譯的,很想狠揍他一頓,翻譯資料不是為了讓別人看懂的嗎?最討厭人為生造術語,提高入門者學習難度,沒辦法,現在已經約定俗成了,不過叫什麼不重要,關鍵是理解內容。
正則表達式的作用:通過約定好的表達方式,讓程序在一大串內容里,找到我們需要挑出來的一小串內容。比如在「中華人民共和國」(大串)里找「人民」(小串)。
好比,你要告訴機器人,從一堆豆子里挑出你想要的紅豆、綠豆、沙子或者蟲子,但是要告訴機器人,這些東西的特徵。
正則表達式就是這些東西的特徵怎麼描述。如果描述的不清楚,可能找不到你需要的內容,甚至是找到錯誤的內容,比如騎白馬的不一定是王子,也有可能是唐僧。
為了配合後續的練習,我們先來講一下re模塊的功能。
一、re模塊的功能
又暈了吧?re模塊就是本文開頭的Regular Expression縮寫啊。
為了使用re模塊,需要在Python中導入一下,即在第一行,先寫上:
import re
在re模塊里,常用的有四個功能match、search、findall、finditer,可以理解為挑豆子的四種方法。
根據英文可知,四種方法分別是:比較,搜索,找到全部,找到迭代器(又出一個術語,真討厭)。
1、match(比較)
公式:re.match(pattern, string[, flags]),又暈了吧,翻譯成中文再看一下。
翻譯:re模塊.比較(想找的字元一小串,字元一大串[, 標誌]),「標誌」先不用了解,主要指「表示不進行特殊指定,比如忽略大小寫,指定語言等「。
解釋:只從大串中第一個字開始開始找小串,找到一樣的字就成功了,返回匹配的對象位置和內容字樣,沒找到就說「None」。
舉例:
print(re.match("中", "中華人民共和國"))
print(re.match("華", "中華人民共和國"))
返回:
re.SRE_Match object; span=(0, 1), match=中>
<None>
這說明,「中」找到了,因為「中」是第一個字,而「華」是第二個字,返回「None」,同樣,找兩個字也行,比如「中華」。第一個功能看懂了,後面的就容易了。
2、search(搜索)
公式:re.search(pattern, string[, flags])
解釋:搜索大串中的小串,位置在哪都行,但是只找第一串,會返回小串的位置和內容。
舉例:
print(re.search("中", "中華人民共和國中央人民政府"))
返回:
<_sre.SRE_Match object; span=(0, 1), match=中>
3、findall(找到全部)
公式:re.findall(pattern, string[, flags])
解釋:返回大串中所有與小串相同的字元串,返回一個列表,也叫「數組」。
舉例:
print(re.findall("中", "中華人民共和國,中央人民政府"))
返回:
[中, 中]
怎麼證明這是數組呢?運行type()函數即可。
X = re.findall("中", "中華人民共和國,中央人民政府")
print(type(X)) print(X[0]) print(X[1])
返回:
中
中
4、finditer(找到迭代器)
公式:re.finditer(pattern, string[, flags])
解釋:小串中所有與大串相匹配的全部字串,返回形式為迭代器,還包括了小串在大串中的位置。
舉例:
X1 = re.finditer("中", "中華人民共和國中華人民共和國中華人民共和國")
X2 = X1.__iter__()
print(X2) print(type(X2)) print(next(X2)) print(next(X2)) print(next(X2))
返回:
<class callable_iterator>
<_sre.SRE_Match object; span=(0, 1), match=中><_sre.SRE_Match object; span=(7, 8), match=中><_sre.SRE_Match object; span=(14, 15), match=中>
迭代器這個東西有點麻煩,初學者暫時用不上,先看看運行結果吧,以後我們再具體講這個。
推薦閱讀:
※《Fluent Python》雜記
※寫了一個scrapy爬蟲,為什麼運行提示找不到Douban.items這個模塊??
※原來你還會python啊?
※Python 2 or Python 3
TAG:Python |