正則表達式(Regular Expression)购披,又稱規(guī)則表達式杖挣。真不知道是哪個大哥翻譯的,很想狠揍他一頓刚陡,翻譯資料不是為了讓別人看懂的嗎惩妇?最討厭人為生造術語,提高入門者學習難度筐乳,沒辦法歌殃,現在已經約定俗成了,不過叫什么不重要蝙云,關鍵是理解內容氓皱。
正則表達式的作用:通過約定好的表達方式,讓程序在一大串內容里勃刨,找到我們需要挑出來的一小串內容波材。比如在“中華人民共和國”(大串)里找“人民”(小串)。
好比朵你,你要告訴機器人各聘,從一堆豆子里挑出你想要的紅豆、綠豆抡医、沙子或者蟲子躲因,但是要告訴機器人早敬,這些東西的特征。
正則表達式就是這些東西的特征怎么描述大脉。如果描述的不清楚搞监,可能找不到你需要的內容,甚至是找到錯誤的內容镰矿,比如騎白馬的不一定是王子琐驴,也有可能是唐僧。
為了配合后續(xù)的練習秤标,我們先來講一下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(next(X2))??
print(next(X2))??
print(next(X2))??
返回:
<_sre.SRE_Match object; span=(0, 1), match='中'>
<_sre.SRE_Match object; span=(7, 8), match='中'>
<_sre.SRE_Match object; span=(14, 15), match='中'>
迭代器這個東西有點麻煩栅受,初學者暫時用不上,先看看運行結果吧恭朗,以后我們再具體講這個屏镊。