首页 > 技术文章 > Python 模块之re正则表达式

wuliwawa 2018-08-14 16:28 原文

re

正则表达式就是字符串的匹配规则

元字符: . ^ $ * + ? { } [ ] | ( ) \ 

. : 默认匹配的是除'\n'以外的所有字符 (在方法内指定flags = re.DOTALL,匹配任意字符)

^ : 从字符串的开头开始匹配 (在方法内指定falgs = re.MULTILINE,则会改变这种行为)

$ : 从字符串的结尾开始匹配 (在方法内指定falgs = re.MULTILINE,则会改变这种行为)

* : 匹配*前的字符0次以上

+ : 匹配+前的字符1次以上

? : 匹配?前的字符0次或1次

{ } : {m}匹配前一个字符m次,{m,n}匹配前一个字符m到n次(包含m和n)

[ ] : 字符集,从[ ]中任意匹配一个,[^]匹配任意一个不在[ ]中的字符

| : 或,匹配|左边或右边的字符

( ) : 组,在正则表达式的规则里会优先运行组里的表达式 (在( )里加?:可以取消组的优先级)

\ : 转义,把有特殊意义的字符转成字面意思

 

\A : 从字符串开头开始匹配,效果同^

\Z : 从字符串结尾开始匹配,效果同$

\d : 匹配数字0-9,效果同[0-9]

\D : 匹配非数字,效果同[^0-9]

\w : 匹配字母和数字,效果同[A-Za-z0-9]

\W : 匹配非字母、非数字,效果同[^A-Za-z0-9]

\s : 匹配空白字符,空格、\t 、\n、 \r

(?P<name>) : 用法:'(?P<name>\d+)'匹配数字

re.search('(?P<name>\d+)','abcd1234abcd1234').groupdict('name')#返回一个字典

re.search('(?P<name>\d+)','abcd1234abcd1234').group('name')#返回'name'对应的值

 

re模块的方法

re.compile(pattern [, flags]) : 传入pattern正则表达式,返回一个匹配对象。

reobj = re.compile('\d+') ,使用re.compile后,re.findall方法转换成reobj.findall,re模块其他的方法也作相同的转换

re.match(pattern, string): 从字符串开头开始匹配,没有匹配到返回None,反之返回_sre.SRE_Match对象

re.search(pattern, string, falgs): 返回string匹配到的第一个字符串的_sre.SRE_Match对象,没有匹配到则返回None

falgs参数:flags=re.MULTILINE(同re.M) 多行模式,改变'^'、'$'的行为

       flags=re.DOTALL(同re.S) 使用这个参数,可以使'.'匹配到'\n'

       flags=re.IGNORECASE(同re.I) 忽略大小写

       flags=re.VERBOSE(同re.X) 可以给表达式写注释

re.findall(pattern, string, falgs): 返回字符串匹配到的列表

re.split(pattern, string, maxsplit, falgs): 返回被正则表达式切分后的列表,maxsplit为最大切分次数

re.sub(pattern, repl, string, count, falgs): 替换字符串中正则表达式匹配到子字符串,count参数为替换的次数

re.subn(pattern, repl, string, count, falgs): 替换字符串中正则表达式匹配到子字符串,并返回替换的次数,count参数为替换的次数

re.fullmatch(pattern, string, falgs): 完全匹配字符串,匹配不到返回None

re.finditer(pattern, string, falgs): 查找匹配的字符串,并返回一个iterator

推荐阅读