re模块
findall
功能:返回满足匹配条件的结果,并放在列表里
import re
ret = re.findall('[a-z]+', "eva egon yuan")
print(ret)
结果
['eva', 'egon', 'yuan']
search
功能:从前往后找到一个就返回,返回的变量需要调用group函数才能拿到结果,如果没有找到那么返回None,调用group会报错。
import re
ret = re.search('e',"eva egon yuan")
print(ret)
print(ret.group())
结果
<re.Match object; span=(0, 1), match='e'>
e
import re
ret = re.search('j',"eva egon yuan")
print(ret)
print(ret.group())
结果
Traceback (most recent call last):
None
File "E:/re模块.py", line 12, in <module>
print(ret.group())
AttributeError: 'NoneType' object has no attribute 'group'
match
功能:从头开始匹配,如果正则规则从头可以匹配上,就返回一个变量。匹配的内容需要用group才能显示,如果没有匹配上就返回None,调用group时会报错。
import re
ret = re.match('ev', "eva egon yuan")
print(ret)
print(ret.group())
结果
<re.Match object; span=(0, 2), match='ev'>
ev
split
功能:按照正则规则依次分割字符串
import re
ret = re.split('[ab]', 'abcd')
# 先按a进行分割,得到''和'bcd',再按b进行分割,得到''和'cd'
print(ret) #['','','cd']
结果
['', '', 'cd']
sub
功能:替换
import re
ret = re.sub('\d','H','sdd21vs2sdfe5',1)
# 将sdd21vs2sdfe5中的数字替换成H,只替换1次
print(ret)
结果
sddH1vs2sdfe5
import re
ret = re.sub('\d','H','sdd21vs2sdfe5')
# 将sdd21vs2sdfe5中的数字替换成H
print(ret)
结果
sddHHvsHsdfeH
subn
功能:替换并返回替换次数
import re
ret = re.subn('\d','H','sdd21vs2sdfe5')
print(ret)
结果
('sddHHvsHsdfeH', 4)
compile
功能:将正则表达式编译为一个正则表达式对象,以便反复使用
import re
obj = re.compile('\d{3}')
# 将正则表达式编译为一个正则表达式对象,,规则要匹配的是3个数字
ret = obj.search('sdf44sdf123fwf')
print(ret.group())
ret = obj.search('sd569fwf13')
print(ret.group())
结果
123
569
finditer
功能:将结果以迭代器形式返回
import re
ret = re.finditer('\d', 'sd1f2ds1f3s13df21')
# print(next(ret).group())
# print(next(ret).group())
# print(next(ret).group())
for i in ret:
print(i.group())
结果
1
2
1
3
1
3
2
1
注意
findall的优先级查询
findall会优先把匹配结果的分组里内容返回,如果想要匹配结果,取消权限即可(?:)
import re
ret = re.findall('www.(baidu|google).com', 'www.baidu.com')
print(ret)
ret = re.findall('www.(?:baidu|google).com', 'www.baidu.com')
print(ret)
结果
['baidu']
['www.baidu.com']
split的优先级查询
没有()的没有保留匹配上的项,有()的保留了匹配上的项
import re
ret = re.split('\d', 'eva3egon4yuan')
print(ret)
ret = re.split('(\d)', 'eva3egon4yuan')
print(ret)
ret = re.split('(?:\d)', 'eva3egon4yuan')
print(ret)
结果
['eva', 'egon', 'yuan']
['eva', '3', 'egon', '4', 'yuan']
['eva', 'egon', 'yuan']
正则表达式
参考:http://www.cnblogs.com/Eva-J/articles/7228075.html#_label10