正则表达式(3)之常用函数

1、编译正则表达式(re.compile()):将正则表达式编译成对象,来进行匹配,会比解释性执行快很多。如果正则表达式需要经常进行匹配,建议编译成对象。

>>>import re
>>>r1=r'\d{3,4}-?\d{8}'
>>>p_tel=re.compile(r1)
>>>p_tel
re.compile('\\d{3,4}-?\\d{8}')
>>> p_tel.findall('010-12345678')
['010-12345678']
>>> p_tel.findall('010-123456789')
['010-12345678']
>>> 

编译后的正则会比没编译的正则执行快。
另外re.compile()也接受可选的标志参数,常用来实现不同的特殊功能和语法变更。例如,不区分大小写,就可以用下面的:

>>>oWolf=re.compile(r'owolf',re.I)#不区分大小写
>>>oWolf.findall('oWolf')
['oWolf']
>>>oWolf.findall('owolf')
['owolf']
>>>oWolf.findall('OWOLF')
'OWOLF'

2、match()
用其匹配字符串,只有被匹配的元素或数据只有在开头位置,才能返回一个对象。

>>>oWolf=re.compile(r'owolf',re.I)
>>> oWolf.match('owoLF  hello')
<_sre.SRE_Match object; span=(0, 5), match='owoLF'>#返回了一个match对象
>>> oWolf.match('hello')
>>>#返回一个空值
>>>oWolf.match('hello  owolf')
>>>#同样返回一个空值

3、search()
用其匹配字符串,无论被匹配的元素或数据在哪个位置(这是与match()的区别),都能返回一个对象。

>>> owolf=re.compile(r'owolf',re.I)
>>> owolf.search('hello owolf')
<_sre.SRE_Match object; span=(6, 11), match='owolf'>
>>> owolf.search('OWOLF hello')
<_sre.SRE_Match object; span=(0, 5), match='OWOLF'>
>>> owolf.search('hello Owolf hello')
<_sre.SRE_Match object; span=(6, 11), match='Owolf'>
>>> owolf.search('hello hello')
>>> #返回空值

如果没有匹配到的话,match()和search()将返回None。如果成功的话,就会返回一个“MatchObject实例”

MatchObject实例方法:
group() 返回被RE匹配的字符串
start() 返回匹配开始的位置
end() 返回匹配结束的位置
span() 返回一个元组包含匹配(开始、结束)的位置

实际程序中,最常见的做法是将‘MatchObject’保存在一个变量里,然后检查它是否为空

>>> owolf=re.compile(r'owolf',re.I)
>>> owolf.search('hello owolf')
<_sre.SRE_Match object; span=(6, 11), match='owolf'>
>>> x=owolf.search('hello owolf')
>>> x
<_sre.SRE_Match object; span=(6, 11), match='owolf'>
>>> x.group()
'owolf'
>>> 

4、findall()
找到RE所匹配的所有子串,并把它们作为一个列表返回
5、finditer()
找到RE所匹配的所有子串,并把它们作为一个迭代器对象返回

>>> owolf=re.compile(r'owolf',re.I)
>>> owolf.finditer('hello owolf owolf hello owolf')
<callable_iterator object at 0x000001B73BB00BE0>#返回一个迭代器对象
>>> x=owolf.finditer('hello owolf owolf hello owolf')
>>> x     #将一个迭代器对象给变量x
<callable_iterator object at 0x000001B73BB00C88>
>>> next(x)
<_sre.SRE_Match object; span=(6, 11), match='owolf'>#遍历迭代器,返回一个MatchObject
>>> y=next(x)
>>> y.group()   #查看被匹配的字符串
'owolf'
>>> 

6、sub()
利用正则进行字符串替换
例如:根据正则rs,用“python”替换“csvt cvvt caat cggt coop”

>>> rs=r'c..t'
>>> re.sub(rs,'python','csvt  cvvt caat cggt coop')
'python  python python python coop'
>>> 

7、subn(),作用同sub(),只是增加了替换的个数。

>>> rs=r'c..t'
>>> re.sub(rs,'python','csvt  cvvt caat cggt coop')
('python  python python python coop',4)
>>>

8、split()
利用正则规则,分割字符串。
如:

>>>s="123+456-789*000"
>>>re.split(r'[\+\-\*]',s)
['123','456','789','000']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值