字元集

好了,透過上面的幾個實例我們初步認識了 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', '_


繼續學習