re模块终篇

re模块下的常用方法

findall

是把能匹配到的所有放到一个列表里面放到内存中,一执行就能拿到结果
例子在上一篇博客里

search

函数会在字符串内查找模式匹配,直到找到第一个匹配然后返回一个对象

通过调用group()方法得到匹配的字符串
例:

# search
print(re.search("(?P<name>[a-z]+)","alex36wusir34sdfahk33"))
print(re.search("(?P<name>[a-z]+)","alex36wusir34sdfahk33").group())
print(re.search("(?P<name>[a-z]+)\d+","alex36wusir34sdfahk33"))
print((re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34sdfahk33")).group("name"))
print((re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34sdfahk33")).group("age"))

结果:

<_sre.SRE_Match object; span=(0, 4), match='alex'>
alex
<_sre.SRE_Match object; span=(0, 6), match='alex36'>
alex
36

match

和search差不多,不过只在字符串开始处进行匹配

split

分割
例:

#split
print(re.split(" ","hello abc def"))
print(re.split("[ |]","hello abc|def"))
print(re.split("[ab]","asdabcd"))#[]是按里面的a或b,所以分的时候按a分,再把剩下的按b分一次
print(re.split("[ab]","abc"))#注意按a分时,第一个为a它左边为空右边为bc,再按b分bc作为空右为c

结果:

['hello', 'abc', 'def']
['hello', 'abc', 'def']
['', 'sd', '', 'cd']
['', '', 'c']

sub

# sub 首先得有个字符串,想把字符串中的数字替换成别的 所以得先在字符串中找到数字,然后用什么替换
print(re.sub("\d","A","jaskdfas21443dfjk325"))
print(re.sub("\d","A","jaskdfas21443dfjk325",4))
print(re.subn("\d","A","jaskdfas21443dfjk325"))

结果:

jaskdfasAAAAAdfjkAAA
jaskdfasAAAA3dfjk325
('jaskdfasAAAAAdfjkAAA', 8)

compile

#compile 如果只是一次,那么和re.findall()是一样的。但是多次的话,效率上就可以看出不同了
#后者需要对规则编译好多次,而compile只需对规则编译一次
com = re.compile("\d+")
print(com.findall("afsd1323asd23767"))

结果:

['1323', '23767']

finditer

是把能匹配到的所有封装到一个迭代器里面(当处理的比较多的时候,它把东西放到迭代器中,用一条处理一条)

#finditer

ret = re.finditer("\d","dsafg31j123")
print(ret)
print(next(ret).group())
print(next(ret).group())

结果:

<callable_iterator object at 0x00000094EF188F28>
3
1

补充:

#这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
ret = re.findall("www\.(baidu|163)\.com","afdddfwww.baidu.com")
print(ret)
ret1 = re.findall("www\.(?:baidu|163)\.com","afdddfwww.baidu.com")
print(ret1)

结果:

['baidu']
['www.baidu.com']

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值