1 search(): 在整个字符串中查找,返回第一个匹配内容,如果找到返回match对象,没找到返回None;需要通过group取值,为None时会报错
import re
ret = re.search('d+','wanghw123ww676')
print(ret)
if ret:
print(ret.group())
输出结果:
<_sre.SRE_Match object; span=(6, 9), match='123'>
123
2 match():从字符串的第一个字符开始匹配,如果找到返回match对象,没找到返回None;需要通过group方法取值,为None时会报错
import re
mm="c:\ab\bc\cd\"
print (mm)
r=re.match("c:\\ab",mm) #\防止转义
print (r.group())
r=re.match(r"c:\ab",mm).group() #r表示原生字符串
print (r)
输出结果:
c:abccd
c:ab
c:ab
3 findall():在字符串中匹配,如果成功返回match对象,如果失败返回None
import re
ret = re.findall('d+','wanghw123ww676')
print(ret)
输出结果:
['123', '676']
4 finditer():在字符串中匹配,如果成功返回match可迭代对象,如果失败返回None
import re
ret = re.finditer('d+','wanghw123ww676')
print(ret)
for m in ret:
print(m.group())
输出结果:
<callable_iterator object at 0x0000029D80957CF8>
123
676
5 split():按照匹配的字符串进行分割
import re
s1 = 'wanghw123whw456qwe'
sq = re.split('d+',s1)
print(sq)
输出结果:
['wanghw', 'whw', 'qwe']
6 sub():替换匹配的子字符串,返回替换之后的字符串
sub方法的第一个参数是正则的规则,第二个参数是要被替换成的字符串,第三个参数是需要被操作的字符串。当然,
聪明的你肯定想到一个问题:这默认替换的是所有符合规则的字符串呀!我如果想限定替换的次数怎么做呢?
我们可以指定第四个参数,来达到限定替换次数的作用
import re
s1 = 'wanghw123whw456'
ss = re.subn('d+','HERO',s1)
print(ss)
s1 = 'wanghw123whw456'
ss = re.sub('d+','HERO',s1,1)
print(ss)
输出结果:
('wanghwHEROwhwHERO', 2)
wanghwHEROwhw456
match()和search()的区别:
- match()函数只检测RE是不是在string的开始位置匹配
- search()会扫描整个string查找匹配
- match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none