小括号 ()
小括号表示分组,即括号中的内容作为一个整体看待,例如你想匹配ab字符串任意次,那么就要写成
假设有字符串abbb
(ab)* -- 结果为:ab
ab* -- abbb
转义字符 \
如果要匹配(或\等本身就是正则规则的字符,就必须在前面加上反斜杠\进行转义。
import re
re.match('^(\(ab\))*', '(ab)').group() -- (ab)
条件或 |
用|表示或条件,也就是满足其中一个即可。
import re
re.match('ab|cd', 'abef').group() -- ab
re.match('ab|cd', 'cdef').group() -- cd
re.match('ab|cd', 'abcd').group() -- ab
re.match('(ab|cd)+', 'abcd').group() -- abcd
区间 []
用[]表示区间,如0-9,可以写为[0-9]
import re
re.match('[abcd]{3}', 'abcd').group() -- abc
# 下面这个比较有意思的,[]表示区间,所以这里的[ab|cd]被理解为了a,b,c,d
# 中间的|其实是没有意义的
re.search('[ab|cd]{3}', 'abcd').group() -- abc
# search只匹配成功一次
re.search('[a|b|c]+', 'aqblcd').group() -- a
re.search('[a|b|c]+', 'abqblcd').group() -- ab
# findall才是全部匹配
pattern = re.compile('[abc]+')
match = pattern.findall('aqblcd')
-- ['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’] ```