一、re模块下的常用方法 : findall search match spilt sub subn compile finditer
首先要:import re 导入模块
findall 在字符串中查找所有满足条件的,并返回
ret=re.findall('a','asdvma')
print(ret)
#['a', 'a']
search 查找函数会在字符串内查找到第一个匹配,然后返回这个对象,
只有通过调用group()方法才能得到匹配的字符串,如果字符串没有匹配,则返回None。
ret=re.search('a','asdvma')
print(ret.group())
#a
match 从字符串第一个字符开始查找,第一个没有就不再往后找了
re=re.search('a','asdvma')
print(re.group()) #a
ret=re.search('c','asdvma')
print(ret.group()) #找不到,调用group 会报错
#match是从头开始匹配,如果正则规则从头开始可以匹配上,就返回一个变量。
#匹配的内容需要用group才能显示
#如果没匹配上,就返回None,调用group会报错
spilt
ret = re.split('[ab]', 'abcd')
print(ret) # ['', '', 'cd']
#先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
sub 把正则找到的字符替换为你想转成的字符
ret=re.sub('a','H','ERGJFVacza')
print(ret) #ERGJFVHczH
subn 把正则找到的字符替换为你想转成的字符,并且返回替换的数量
ret=re.subn('a','H','ERGJFVacza')
print(ret)
#('ERGJFVHczH', 2) 返回元组(替换的结果,替换了多少次)
finditer返回一个存放匹配结果的迭代器
ret=re.finditer('a','fnksdngaadmsva')
print(ret) #<callable_iterator object at 0x01D4E9B0> 返回迭代器
print(next(ret).group()) #a #查看第一个结果
print(next(ret).group()) #a #查看第二个结果
print([i.group() for i in ret]) #查看剩余的左右结果
for i in ret:
print(i.group())
二、正则使用进阶,取消正则优先级 ?:
import re
ret=re.findall('www.(a|b).com','www.a.com')
print(ret) #['a'] 因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可.
取消优先级,即在括号最前面加 ?: 就可以了
ret=re.findall('www.(?:a|b).com','www.a.com')
print(ret) #['www.a.com']
ret=re.split('d+','sadj4j3f2')
print(ret) #['sadj', 'j', 'f', '']
ret=re.split('(d+)','sadj4j3f2') # 加括号,结果是把数字也保留下来了