Python re.search和re.findall的比较:
先分析re.search:
importre
s1='hjxxHelloxxrynxxPythonxxplkhjxxHixxrynxxWorldxxplk'f1=re.search('xx(.*?)xx',s1)print(f1)
f2=re.search('xx(.*?)xx',s1).group(1)print(f2)
f3=re.search('xx(.*?)xxrynxx(.*?)xx',s1)print(f3)
f41=re.search('xx(.*?)xxrynxx(.*?)xx',s1).group(1)#这里如果用group(3)则返回no such group,可见re.search寻找第一个满足条件序列,即当re.search找到第一个符合要求的内容后,不管后面是否还有符合要求的内容,都会停止寻找
print(f41)
f42=re.search('xx(.*?)xxrynxx(.*?)xxplkhjxx(.*?)xxrynxx(.*?)xx',s1).group(3)print(f42)print('end')
输出为:
<_sre.sre_match object span="(2," match="xxHelloxx"> #数据类型为‘sre.SRE_MATCH’
Hello #数据类型为‘str’
Hello
Hi
end
注意,search要加.group(%d)!这样才能读取所需类型,而不是得到‘sre.SRE_MATCH’类型,which无法直接处理。
再来看re.findall:
importre
s1='hjxxHelloxxrynxxPythonxxplkhjxxHixxrynxxWorldxxplk'f1=re.findall('xx(.*?)xx',s1)print(f1)
f2=re.findall('xx(.*?)xxrynxx(.*?)xx',s1)print(f2)print(f2[0])print(f2[1][0])print(type(f2))print(type(f2[0]))print(type(f2[1][0]))print('end')
输出为:
['Hello', 'Python', 'Hi', 'World']
[('Hello', 'Python'), ('Hi', 'World')]
('Hello', 'Python')
Hi
end