欢迎前往我的个人博客
3.re.findall
findall()用于非重叠地查找某字符串中一个正则表达式模式出现的情况。
findall()和 search()相似之处在于二者都执行字符串搜索,不同之处是,findall()总返回一个列表。
如果 findall()没有找到匹配的部分,会返回空列表;
如果成功找到匹配部分,则返回所有匹配部分的列表(按从左到右出现的顺序排列)。
import re
bt = 'hi'
m = re.findall(bt, 'h hello')
print m
m = re.findall(bt, 'hi hello')
print m
m = re.findall(bt, 'abchidef ')
print m
m = re.findall(bt, 'hi shi hih')
print m
结果:
[]
['hi']
['hi']
['hi', 'hi', 'hi']
这2个方法是将某字符串中所有匹配正则表达式模式的部分进行替换。用来替换的部分通常是一个字符串,但也可能
是一个函数,该函数返回一个用来替换的字符串。
subn返回一个表示替换次数的数字,替换后的字符串和表示替换次数的数字作为一个元组的元素返回
import re
bt = '[0-9]'
m = re.sub(bt,'A','a1b2c3')
print m
m = re.subn(bt,'A','a1b2c3')
print m
结果:
aAbAcA
('aAbAcA', 3)
import re
bt = '[0-9]'
m = re.split(bt, 'a1b2c3')
print m
bt = ':'
m = re.split(':', 'str1:str2:str3')
print m
结果:
['a', 'b', 'c', '']
['str1', 'str2', 'str3']
6.finditer
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。import re
p = re.compile(r'\d+')
for m in p.finditer('one1two2three3four4'):
print m.group()
7.Pattern
Pattern对象是一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找。
Pattern不能直接实例化,必须使用re.compile()进行构造。
Pattern提供了几个可读属性用于获取表达式的相关信息:
pattern: 编译时用的表达式字符串。
flags: 编译时用的匹配模式。数字形式。
groups: 表达式中分组的数量。
groupindex: 以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
import re
p = re.compile('ab[cd]?', re.I)
print "p.pattern:", p.pattern
print "p.flags:", p.flags
print "re.I:", re.I
print "p.groups:", p.groups
print "p.groupindex:", p.groupindex
结果:
p.pattern: ab[cd]?
p.flags: 2
re.I: 2
p.groups: 0
p.groupindex: {}
import re
m = re.match('foo', 'seaFood',re.I) # no match 匹配失败
if m is not None:
print m.group()
else:
print "匹配失败"
m = re.search('foo', 'seaFood',re.I) # search()匹配成功
if m is not None:
print m.group()
else:
print "匹配失败"
结果:
匹配失败
Foo