字元集
好了,透過上面的幾個實例我們初步認識了 Python 的正規表示式,可能你就會問,正規表示式還有什麼規則,什麼字母代表什麼意思呢?
其實,這些都不急,在本章後面會給出對應的正則表達式規則列表,而且這些東西在網上隨便都能 Google 到。所以現在,我們還是進一步加深對正規表示式的理解,講一下正規表示式的字元集。
字元集是由一對方括號 “[]” 括起來的字元集合。使用字元集,可以匹配多個字元中的一個。
舉個例子,例如你使用 C[ET]O 配對到的是 CEO 或 CTO ,也就是說 [ET] 代表的是一個 E 或一個 T 。像上面提到的 [a-z] ,就是所有小寫字母中的其中一個,這裡使用了連字符 “-” 定義一個連續字符的字符範圍。當然,像這種寫法,裡面可以包含多個字元範圍的,例如:[0-9a-fA-F] ,匹配單一的十六進位數字,且不分大小寫。注意了,字元和範圍定義的先後順序對匹配的結果是沒有任何影響的。
其實說了那麼多,只是想證明,字元集一對方括號「[]」 裡面的字元關係是或關係,下面看一個例子:
import re a = 'uav,ubv,ucv,uwv,uzv,ucv,uov' # 字符集 # 取 u 和 v 中间是 a 或 b 或 c 的字符 findall = re.findall('u[abc]v', a) print(findall) # 如果是连续的字母,数字可以使用 - 来代替 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) 输出的结果: ['uav', 'ubv', 'ucv', 'ucv'] ['uav', 'ubv', 'ucv', 'ucv'] ['uwv', 'uzv', 'uov']
在例子中,使用了取反字元集,也就是在左方括號“[” 後面緊跟著一個尖括號“^”,就會對字元集取反。需要記住的一點是,取反字元集必須要符合一個字元。例如:q[^u] 不代表:配對一個 q,後面沒有 u 跟著。它意味著:匹配一個 q,後面跟著一個不是 u 的字元。具體可以對比上面範例中輸出的結果來理解。
我們都知道,正則表達式本身就定義了一些規則,比如\d,匹配所有數字字符,其實它是等價於[0-9],下面也寫了個例子,通過字符集的形式解釋了這些特殊字元。
import re a = 'uav_ubv_ucv_uwv_uzv_ucv_uov&123-456-789' # 概括字符集 # \d 相当于 [0-9] ,匹配所有数字字符 # \D 相当于 [^0-9] , 匹配所有非数字字符 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)
輸出結果:
['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', '_