字元集
好了,透過上面的幾個實例我們初步認(rèn)識了 Python 的正規(guī)表示式,可能你就會問,正規(guī)表示式還有什麼規(guī)則,什麼字母代表什麼意思呢?
其實,這些都不急,在本章後面會給出對應(yīng)的正則表達(dá)式規(guī)則列表,而且這些東西在網(wǎng)上隨便都能 Google 到。所以現(xiàn)在,我們還是進一步加深對正規(guī)表示式的理解,講一下正規(guī)表示式的字元集。
字元集是由一對方括號 “[]” 括起來的字元集合。使用字元集,可以匹配多個字元中的一個。
舉個例子,例如你使用 C[ET]O 配對到的是 CEO 或 CTO ,也就是說 [ET] 代表的是一個 E 或一個 T 。像上面提到的 [a-z] ,就是所有小寫字母中的其中一個,這裡使用了連字符 “-” 定義一個連續(xù)字符的字符範(fàn)圍。當(dāng)然,像這種寫法,裡面可以包含多個字元範(fàn)圍的,例如:[0-9a-fA-F] ,匹配單一的十六進位數(shù)字,且不分大小寫。注意了,字元和範(fàn)圍定義的先後順序?qū)ζヅ涞慕Y(jié)果是沒有任何影響的。
其實說了那麼多,只是想證明,字元集一對方括號「[]」 裡面的字元關(guān)係是或關(guān)係,下面看一個例子:
import re a = 'uav,ubv,ucv,uwv,uzv,ucv,uov' # 字符集 # 取 u 和 v 中間是 a 或 b 或 c 的字符 findall = re.findall('u[abc]v', a) print(findall) # 如果是連續(xù)的字母,數(shù)字可以使用 - 來代替 l = re.findall('u[a-c]v', a) print(l) # 取 u 和 v 中間不是 a 或 b 或 c 的字符 re_findall = re.findall('u[^abc]v', a) print(re_findall) 輸出的結(jié)果: ['uav', 'ubv', 'ucv', 'ucv'] ['uav', 'ubv', 'ucv', 'ucv'] ['uwv', 'uzv', 'uov']
在例子中,使用了取反字元集,也就是在左方括號“[” 後面緊跟著一個尖括號“^”,就會對字元集取反。需要記住的一點是,取反字元集必須要符合一個字元。例如:q[^u] 不代表:配對一個 q,後面沒有 u 跟著。它意味著:匹配一個 q,後面跟著一個不是 u 的字元。具體可以對比上面範(fàn)例中輸出的結(jié)果來理解。
我們都知道,正則表達(dá)式本身就定義了一些規(guī)則,比如\d,匹配所有數(shù)字字符,其實它是等價於[0-9],下面也寫了個例子,通過字符集的形式解釋了這些特殊字元。
import re a = 'uav_ubv_ucv_uwv_uzv_ucv_uov&123-456-789' # 概括字符集 # \d 相當(dāng)于 [0-9] ,匹配所有數(shù)字字符 # \D 相當(dāng)于 [^0-9] , 匹配所有非數(shù)字字符 findall1 = re.findall('\d', a) findall2 = re.findall('[0-9]', a) findall3 = re.findall('\D', a) findall4 = re.findall('[^0-9]', a) print(findall1) print(findall2) print(findall3) print(findall4) # \w 匹配包括下劃線的任何單詞字符,等價于 [A-Za-z0-9_] findall5 = re.findall('\w', a) findall6 = re.findall('[A-Za-z0-9_]', a) print(findall5) print(findall6)
輸出結(jié)果:
['1', '2', '3', '4', '5', '6', '7', '8', '9'] ['1', '2', '3', '4', '5', '6', '7', '8', '9'] ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_', 'u', 'o', 'v', '&', '-', '-'] ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_', 'u', 'o', 'v', '&', '-', '-'] ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_', 'u', 'o', 'v', '1', '2', '3', '4', '5', '6', '7', '8', '9'] ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_