#元字符在re模块中有特殊意义的字符,有:^ $. * + {} [] () |
^$
#表示开头结尾,注意:[^]表示取反
.
#点,表示任意一个字符,包括空格(一个空白字符), (换行符)。但是不能匹配 (换行符)
*
#表示前一个字符出现次数任意次,包括零次
+
#表示前一个字符出现一次以上
{N,M}
#表示前一个字符出现N-M次
?
#表示前面一个字母出现0或1次
[patten1,patten2]
#表示匹配patten1或patten2,中间不需要分割符
#[]还可以取消元字符的特殊意义,但 - ^ 除外
##例如:[.*]即是匹配字符 . 或字符 *
##例如:[a-z]即是匹配所有小写字母
##例如:[^45]即是匹配除了4和除了5,同样不需要分割符
##例如:[d]即是匹配所有数字
()
#表示分组,可以与 | 合用,(ab|cd)表示匹配字符 ab 或 字符 cd
#分组还可以给匹配规则命名,(?P<NAME>patten)表示将规则patten匹配到的内容命名为NAME,在re.search('patten','string').group(*varg)是调用
ret=re.search('(?P<name>w{3})/(?P<number>d{3})','www.baidu.com/glx/311') print(ret.group()) print(ret.group('name')) print(ret.group('number')) ############# glx/311 glx 311
#当使用re.findall()方式时,匹配规则中含有()分组,则匹配到的内容会只显示分组中的内容(分组的优先级较高)
#使用(?:patten),?: 作用时取消分组的权限
ret1=re.findall('www.(w+).com','www.baidu.com') ret2=re.findall('www.(?:w+).com','www.baidu.com') print(ret1) print(ret2) ######## ['baidu'] ['www.baidu.com']
#可以将没有意义的字符表示成有意义的字符,如d,d字符本身是没有意义的,但re模块可将其解释成所有数字
#还可以取消特殊意义,如.,.(点)字符本身有特殊意义,re模块可以将其解释成字符点
##使用 时,需要注意原本使用的内容在python中是否有意义,如,在python中表示退格符,在re模块中表示边界,所以在使用时在规则中要写成 \b 或 r'' ,使得python传入给re模块时时 两个没有意义的字符
##在匹配 时,需要使用 \\ ,这样python传给re模块是才能是 \ 两个没有意义的字符,re模块再解释成 单纯的一个字符
##匹配出 在显示时,是 ['\']
ret=re.findall('\\','aac') print(ret) ######## ['\']
#所以使用在python中有特殊意义的字符时,需要先取消其特殊意义