• 字符集

    字符集

    好了,通过上面的几个实例我们初步认识了 Python 的正则表达式,可能你就会问,正则表达式还有什么规则,什么字母代表什么意思呢?

    其实,这些都不急,在本章后面会给出对应的正则表达式规则列表,而且这些东西在网上随便都能 Google 到。所以现在,我们还是进一步加深对正则表达式的理解,讲一下正则表达式的字符集。

    字符集是由一对方括号 “[]” 括起来的字符集合。使用字符集,可以匹配多个字符中的一个。

    举个例子,比如你使用 C[ET]O 匹配到的是 CEO 或 CTO ,也就是说 [ET] 代表的是一个 E 或者一个 T 。像上面提到的 [a-z] ,就是所有小写字母中的其中一个,这里使用了连字符 “-” 定义一个连续字符的字符范围。当然,像这种写法,里面可以包含多个字符范围的,比如:[0-9a-fA-F] ,匹配单个的十六进制数字,且不分大小写。注意了,字符和范围定义的先后顺序对匹配的结果是没有任何影响的。

    其实说了那么多,只是想证明,字符集一对方括号 “[]” 里面的字符关系是或关系,下面看一个例子:

    1. import re
    2. a = 'uav,ubv,ucv,uwv,uzv,ucv,uov'
    3. # 字符集
    4. # 取 u 和 v 中间是 a 或 b 或 c 的字符
    5. findall = re.findall('u[abc]v', a)
    6. print(findall)
    7. # 如果是连续的字母,数字可以使用 - 来代替
    8. l = re.findall('u[a-c]v', a)
    9. print(l)
    10. # 取 u 和 v 中间不是 a 或 b 或 c 的字符
    11. re_findall = re.findall('u[^abc]v', a)
    12. print(re_findall)

    输出的结果:

    1. ['uav', 'ubv', 'ucv', 'ucv']
    2. ['uav', 'ubv', 'ucv', 'ucv']
    3. ['uwv', 'uzv', 'uov']

    在例子中,使用了取反字符集,也就是在左方括号 “[” 后面紧跟一个尖括号 “^”,就会对字符集取反。需要记住的一点是,取反字符集必须要匹配一个字符。比如:q[^u] 并不意味着:匹配一个 q,后面没有 u 跟着。它意味着:匹配一个 q,后面跟着一个不是 u 的字符。具体可以对比上面例子中输出的结果来理解。

    我们都知道,正则表达式本身就定义了一些规则,比如 \d,匹配所有数字字符,其实它是等价于 [0-9],下面也写了个例子,通过字符集的形式解释了这些特殊字符。

    1. import re
    2. a = 'uav_ubv_ucv_uwv_uzv_ucv_uov&123-456-789'
    3. # 概括字符集
    4. # \d 相当于 [0-9] ,匹配所有数字字符
    5. # \D 相当于 [^0-9] , 匹配所有非数字字符
    6. findall1 = re.findall('\d', a)
    7. findall2 = re.findall('[0-9]', a)
    8. findall3 = re.findall('\D', a)
    9. findall4 = re.findall('[^0-9]', a)
    10. print(findall1)
    11. print(findall2)
    12. print(findall3)
    13. print(findall4)
    14. # \w 匹配包括下划线的任何单词字符,等价于 [A-Za-z0-9_]
    15. findall5 = re.findall('\w', a)
    16. findall6 = re.findall('[A-Za-z0-9_]', a)
    17. print(findall5)
    18. print(findall6)

    输出结果:

    1. ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    2. ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    3. ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_', 'u', 'o', 'v', '&', '-', '-']
    4. ['u', 'a', 'v', '_', 'u', 'b', 'v', '_', 'u', 'c', 'v', '_', 'u', 'w', 'v', '_', 'u', 'z', 'v', '_', 'u', 'c', 'v', '_', 'u', 'o', 'v', '&', '-', '-']
    5. ['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']
    6. ['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']