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']