python爬虫
直播中

mushenmu

3年用户 732经验值
擅长:可编程逻辑
私信 关注
[经验]

python正则表达式字符集

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

更多回帖

发帖
×
20
完善资料,
赚取积分