常用函数:
import re
re.findall() :(正则,str)匹配str中所有符合正则的字符串并以列表返回
re.search() :(正则,str)匹配str中第一个符合规则的字符串返回结果集(没有则为None),用.group()取值(没有则报错)
re.match() :(正则,str)开头匹配str中符合正则的字符串返回结果集(没有则为None),用.group()取值(没有则报错),可以直接用re.search(^正则,str)取代
re.finditer() :(正则,str)匹配str中所有符合正则的字符串并返回一个迭代器,迭代器元素为结果集,用.group()取值节约内存
re.compile() :(正则)编译正则表达式,返回值可以多次使用,上述匹配规则函数均可使用:par=re.compile("[1-9]\b{10}");par.findall(str)节省时间
re.sub() :(正则,newStr,str,count)匹配str中符合正则的count个字符串并用newStr替换,返回替换后的字符串
re.subn() :(正则,newStr,str)匹配str中符合正则的字符串并用newStr替换,返回替换后的字符串和个数组成的元组
re.split() :(正则,str)匹配str中符合正则的字符串并以此分割成列表
分组优先显示:()[取消分组优先直接在()前边加上(?: )即可]
findall中:
par=re.compile(">.*<")
ret=par.findall(r"<h1>hahaha<\h1>")
print(ret) # ['>hahaha<']
par=re.compile(">(.*)<")
ret=par.findall(r"<h1>hahaha<\h1>")
print(ret) #['hahaha']
split()中:
ret=re.split("\d+","23nihao34kili2290")
print(ret) # ['', 'nihao', 'kili', '']
et=par.split("(\d+)","23nihao34kili2290")
print(ret) # ['', '23', 'nihao', '34', 'kili', '2290', '']
search()中(不受影响,但可以分组命名或按索引取值(从1开始)):
ret = re.search(r'<\w+>\w+<\\\w+>',r'<title>qqxing<\title>')
分组不影响:
ret = re.search(r'<(\w+)>(\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group(0)) # <title>qqxing<\title>不受到分组的影响默认为
print(ret.group(1)) #title
print(ret.group(2)) #qqxing
分组命名:
ret = re.search(r'<(?P<ti>\w+)>(?P<content>\w+)<\\(\w+)>',r'<title>qqxing<\title>')
print(ret.group())
print(ret.group("ti"))#title
print(ret.group("content")) #qqxing
分组命名并引用:
ret = re.search('<(?P<tag>\w+)>.*</(?P=tag)>','<h1>wahaha</h2></h1></h3>')
print(ret.group()) #<h1>wahaha</h2></h1>