python18
?取消分组优先
''' re模块 ''' import re phone=input("please input your phone:") if re.match('^1[3456789][0-9]{9}',phone):
#^1[^012][0-9]{9} print(True) else: print(False)
''' re模块 match从头开始匹配 ''' import re ret=re.match('a','aw3rd323rdfft4f') print(ret) print(ret.group())
''' re模块 search发现一个就结束 ''' import re ret=re.search('3','aw3rd323rdfft4f') print(ret) print(ret.group())
''' re模块 split 使用正则关系进行分割 ''' import re ret=re.split('3','aw3rd323rdfft4f') print(ret)
''' re模块 sub 使用正则匹配替换 ''' import re ret=re.sub('3','H','aw3rd323rdfft4f') print(ret)
''' re模块 subn 使用正则匹配替换,包括替换了几次 ''' import re ret=re.subn('3','H','aw3rd323rdfft4f') print(ret)
''' re模块 compile 使用编译正则 ''' import re obj=re.compile('3')#得到正则对象 ret=obj.search('23414f') print(ret.group()) print(ret)
''' re模块 finditer 使用匹配多个使用生成器 ''' import re ret=re.finditer('\d+','345efr345r43333234r')#得到正则对象 for i in ret: print(i) print(ret)
''' re模块 search 使用编译正 获取括号中的分组 ?:在括号中取消分组 ''' import re ret=re.search('1(?:[^012])(\d{9})','1431234567813212345678')#得到正则对象 print(ret.group()) print(ret.group(1)) print(ret.group(2)) print(ret)
''' re模块 findall 使用编译正 获取括号中的分组,组成列表 ?:在括号中取消分组 ''' import re ret=re.findall('www.(.*?).com','www.baidu.com www.sina.com')#得到正则对象 print(ret)
''' re模块 split 使用编译正 获取括号中的分组,组成列表 ?:在括号中取消分组
增加括号可以保留匹配项 ''' import re ret=re.split('\d+www.(.*?).com','12www.baidu.com132www.sina.com')#得到正则对象 print(ret)
获取匹配内容
''' re search 通过(?P<tag_name>\w+)对分组起名字 (?P=tag_name)再次调用 ''' import re ret=re.search("<(?P<tag_name>\w+)>(?P<content>\w+)</(?P=tag_name)>","<h1>hello</h1>") print(ret.group('tag_name')) print(ret.group('content')) print(ret.group())
''' \1取别名 默认组() 顺序,再次出现时根据排序以\1 或 \2表示匹配规则,无须括号(等同于复制规则) ''' import re ret = re.search(r"<(\w+)>(\w+)</\1>\2","<h1>hello</h1>hello") #如果不给组起名字,也可以用\序号来找到对应的组,表示要找的内容和前面的组内容一致 #获取的匹配结果可以直接用group(序号)拿到对应的值 print(ret.group(1)) print(ret.group(2)) #结果 :<h1>hello</h1> print(ret.group()) #结果 :<h1>hello</h1>
数值匹配
''' 匹配正负数,包括小数,整数 ''' import re ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))") print(ret) #['1', '2', '60', '40', '35', '5', '4', '3'] ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))") print(ret) #['1', '-2', '60', '', '5', '-4', '3'] ret.remove("")#移除空格的列表元素 print(ret) #['1', '-2', '60', '5', '-4', '3']
匹配测试
1、 匹配一段文本中的每行的邮箱 ''' partn='\w+@\w+([.]\w+)+' ''' 2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’; ''' partn='^\d{4}-([0][1-9]{1}|1[12])-([012][0-9]|3[012])$'

浙公网安备 33010602011771号