python中的re模块

re模块有三个比较重要的方法

  • findall
  • search
  • match

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())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值