標籤:

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 |