re模块有三个比较重要的方法
findall
findall 返回足所有满足匹配条件的,放在列表中
ret = re.findall('ea','recover search beauty www')
print(ret)
#得到结果['ea', 'ea']
??
ret = re.findall('www.(baidu|zhihu).com','www.zhihu.com')
print(ret)
# 得到结果 ['zhihu'],这是因为findall 会优先把匹配结果里的内容返回,如果想要匹配结果,取消权限即可
ret = re.findall('www.(?:baidu|zhihu).com','www.zhihu.com')
print(ret)
# 得到结果 ['www.zhihu.com']
search
search? 从前向后找到一个就返回,返回的时候,返回一个结果的对象(相当于变量),返回的变量需要调用group才能拿到结果;找不到就返回None,调用group就会报错
通常使用方法
import re
ret = re.search('a','eva yang beauty')
if ret:
print(ret.group())
ret = re.search('[1-9](\d{14})(\d{2}[0-9x]?$)','110101199912098767')
print(ret.group())
print(ret.group(1))
print(ret.group(2)) #可以拿到分组里的值
#得到结果
#110101199912098767
#10101199912098
#767
match
match 是从头开始匹配,如果正怎规则从头开始,可以匹配上,就可以返回一个变量,匹配的内容也需要用group才能拿到结果,找不到就返回None,调用group就会报错
ret = re.match('a','eva yang beauty')
if ret:
print(ret.group())
#结果,不会打印出任何东西
ret1 = re.match('ev','event yang beauty')
if ret1:
print(ret1.group())
#结果,ev
ret2 = re.match('[a-z]+','event yang beauty')
if ret2:
print(ret2.group())
#结果,event
其余的方法
re.split
re模块中的分割,如果有两个匹配,先按前面的分割一次,再按后面的分割一次
import re
ret = re.split('a','abcde')
print(ret)
# 结果['', 'bcde']
ret1 = re.split('[ab]','abcde')
print(ret1)
# 结果['', '', 'cde']
??
ret = re.split('\d+','beauty31hello4word6')
print(ret) #结果['beauty', 'hello', 'word', '']
ret = re.split('(\d+)','beauty31hello4word6')
print(ret) #结果['beauty', '31', 'hello', '4', 'word', '6', '']
# 在匹配部分加上()之后所切出的结果是不同的
# 没有()的结果没有保留所匹配的项,但是有()的却能保留了匹配的项
# 这个在默写需要保留匹配部分的使用过程中非常重要
re.sub
将目标替换成对应的值,可设置多少次
ret = re.sub('\d','H','Hello,beauty40yuan4a5dd',2)
print(ret)
#结果 Hello,beautyHHyuan4a5dd ,将数字替换成'H',被替换了两次
re.subn
将目标替换成对应的值,返回元祖(替换的结果,替换了多少次)
ret = re.subn('\d','H','Hello,beauty40yuan4a5dd')
print(ret)
#结果('Hello,beautyHHyuanHaHdd', 4)
re.compile
将正则表达式编译成为一个正则表达式的对象,
import re
obj = re.compile('\d{3}') #匹配3个数字
ret = obj.search('abcdefg1234567wwwwee3er2')
if ret:
print(ret.group())
#结果是123
re.finditer
返回一个存放匹配结果的迭代器
ret = re.finditer('\d','adbc12345678')
print(ret)
print(next(ret).group()) #查看第一个结果
print(next(ret).group()) #查看第二个结果
print(next(ret).group()) #查看第三个结果
for i in ret:
print(i.group())
|