re 模块,正则匹配表达式
正则匹配表达式就是字符串的匹配规则
re 模块的匹配语法:
- re.match 从头开始匹配,返回从头开始到值的序列号和匹配的值
- re.search 全局匹配,返回当前所在序列号和匹配的值
- re.findall 把所有匹配到的字符放到以列表分隔符,将匹配字符打印出来
- re.split 已匹配到的字符当作列表分隔符,就是将非匹配字符都打印出来
- re.sub 匹配字符并替换
- re.fullmatch 全部匹配
常用的表达式规则
. 点 默认匹配除 \n 外的任意一个字符,若指定了flag DOTALl,则匹配任意字符,包括换行
^ 尖括号 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
$ 刀了符 匹配字符的结尾,若指定flags MULTILINE ,re.search('foo.$','foo1\nfoo2\n',re.MULTILINE).group() 会匹配到foo1
* 星号 匹配 * 星号前的字符0次或多次 re.search('a*', 'aaaabac') 匹配结果 'aaaa'
+ 加号 匹配前一个字符1次或多次 re.findall('ab+', 'ab+aab+abb+dda+') 匹配结果 ['ab', 'ab', 'abb']
? 问号 匹配前一个字符1次或0次,re.findall('ab?', 'ab+aab+abb+dda+') 返回结果 ['ab', 'a', 'ab', 'ab', 'a']
{m} 匹配前一个字符m次 re.findall('b{2}', 'abbbsdb') 匹配结果 ['bb']
{n,m} 匹配前一个字符n到m次 re.findall('b{1,2}', 'abbbsdb') 匹配结果 ['bb', 'b', 'b']
| 管道 匹配 | 左或右的字符 re.search('abc|ABC', 'ABCabcCd').group() 匹配结果'ABC'
(...) 分组匹配 re.search('(abc){2}a(123|45)', 'abcabca456c').group() 匹配结果'abcabca45'
# 扩展
\A 只从字符开头匹配
\Z 匹配字符结尾,同 $
\d 匹配数字0-9
\D 匹配非数字
\w 匹配[A-Za-z0-9],也就是除去特数字符
\W 匹配非[A-Za-z0-9],也就是特殊字符
\s 匹配空白字符,\t,\n,\r 这几种 re.search('\s+', 'ab\tc1\n3').group() 匹配结果'\t'
网友评论