Python之路13:

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'

你可能感兴趣的:(Python之路13:)