搜索是正则表达式的另一类常用的应用场景。也就是从一段文本中找到一个或多个与文本模式匹配的字符串。先从搜索一个匹配字符串开始。
在一个字符串中搜索满足文本模式的字符串需要使用search
方法,该方法的参数与match
方法类似。
m = re.search('abc','xabcy') # abc是文本模式字符串,xabcy是待搜索的字符串
print(m.group()) # 搜索成功,输出结果:abc
[例 11.2] 本例通过使用match
方法和search
方法对文本模式进行匹配和搜索,并对这两个方法做一个对比。
import re
# 进行文本模式匹配,匹配失败,match方法返回None
m = re.match('python','I love python.')
if m is not None:
print(m.group()) # 输出结果:None
print(m)
# 进行文本模式搜索,搜索成功
m = re.search('python','I love python.')
if m is not None:
print(m.group()) # 输出结果:python
print(m) # 输出结果:
输出结果:
None
python
从Match对象(m变量)的输出信息可以看出,span的值是(7,13),表明满足文本模式的字符串的起始位置索引是7,结束位置的下一个字符的索引是13.从这个值可以直接截取满足条件的字符串。
在前面的例子中,只是通过search
方法搜索一个字符串,要想搜索多个字符串,如搜索bike、car和truck,最简单的方法是在文本模式字符串中使用择一匹配符号(|
)。择一匹配符号和逻辑或类似,只要满足任何一个,就算匹配成功。
s = 'bike|car|truck' # 定义使用择一匹配符号的文本模式字符串
m = re.match(s,'bike') # bike满足要求,匹配成功
print(m.group()) # 输出结果:bike
m = re.match(s,'truck') # truck满足要求,匹配成功
print(m.group()) # 输出结果:truck
从上面的代码可以看出,待匹配的字符串只要是bike、car和truck中的任何一个,就会匹配成功。
[例 11.3] 本例使用了带择一匹配符号的文本模式字符串,并通过match
方法和search
方法分别匹配和搜索指定的字符串。
import re
s = 'Bill|Mike|John' # 指定使用择一匹配符号的文本模式字符串
m = re.match(s,'Bill') # 匹配成功
if m is not None:
print(m.group()) # 输出结果:Bill
m = re.search(s,'Where is Mike?') # 搜索成功
if m is not None:
print(m.group()) # 输出结果:Mike
print(m) # 输出结果:
输出结果:
Bill
Mike