小括号 ()

小括号表示分组,即括号中的内容作为一个整体看待,例如你想匹配ab字符串任意次,那么就要写成

  1. 假设有字符串abbb
  2. (ab)* -- 结果为:ab
  3. ab* -- abbb

转义字符 \

如果要匹配(或\等本身就是正则规则的字符,就必须在前面加上反斜杠\进行转义。

  1. import re
  2. re.match('^(\(ab\))*', '(ab)').group() -- (ab)

条件或 |

用|表示或条件,也就是满足其中一个即可。

  1. import re
  2. re.match('ab|cd', 'abef').group() -- ab
  3. re.match('ab|cd', 'cdef').group() -- cd
  4. re.match('ab|cd', 'abcd').group() -- ab
  5. re.match('(ab|cd)+', 'abcd').group() -- abcd

区间 []

用[]表示区间,如0-9,可以写为[0-9]

  1. import re
  2. re.match('[abcd]{3}', 'abcd').group() -- abc
  3. # 下面这个比较有意思的,[]表示区间,所以这里的[ab|cd]被理解为了a,b,c,d
  4. # 中间的|其实是没有意义的
  5. re.search('[ab|cd]{3}', 'abcd').group() -- abc
  6. # search只匹配成功一次
  7. re.search('[a|b|c]+', 'aqblcd').group() -- a
  8. re.search('[a|b|c]+', 'abqblcd').group() -- ab
  9. # findall才是全部匹配
  10. pattern = re.compile('[abc]+')
  11. match = pattern.findall('aqblcd')
  12. -- ['a', 'b', 'c']

Python里的正则

对于Python的re模块来说,

  • re.match是只从头匹配,匹配到一次就会返回
  • re.search是整个字符串匹配,但也是只匹配到一次就会返回。
  • 因此如果需要匹配整个字符串的多个地方满足条件的,需要用re.findall() ```python import re pattern = re.compile(‘[abc]+’) # (a|b|c)+ 或 [a|b|c]+结果是一致的 match = pattern.findall(‘aqblcd’)

print(match)

[‘a’, ‘b’, ‘c’] ```