字符集是由一对方括号 “[]” 括起来的字符集合。使用字符集,可以匹配多个字符中的一个。
举个例子,比如你使用 C[ET]O 匹配到的是 CEO 或 CTO ,也就是说 [ET] 代表的是一个 E 或者一个 T 。像上面提到的 [a-z] ,就是所有小写字母中的其中一个,这里使用了连字符 “-” 定义一个连续字符的字符范围。当然,像这种写法,里面可以包含多个字符范围的,比如:[0-9a-fA-F] ,匹配单个的十六进制数字,且不分大小写。注意了,字符和范围定义的先后顺序对匹配的结果是没有任何影响的。
其实说了那么多,只是想证明,字符集一对方括号 “[]” 里面的字符关系是"或(OR)"关系,下面看一个例子:
- 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', '_',