匹配对象
使用match()函数和search()函数进行正则匹配时,返回的不是单一的匹配结果,而是如下形式的字符串:
<_sre.SRE_Match object; span=(2, 4), match='ow'> # search()函数匹配结果
该字符串表明返回结果是一个Match对象,其中主要包含两项内容,分别为span和match,span表示本次获取的匹配对象在原目标文本中所处的位置,目标文本的下标从0开始;match表示匹配对象的内容。
span属性是一个元组,元组中有两个元素,第一个元素表示匹配对象在目标文本中的开始位置,第二个元素表示匹配对象在目标文本中的结束位置。如上所示的字符串中,匹配对象“ow”在原目标文本中的起始位置为2,结束位置为4。
re模块中提供了一些与Match对象相关的方法,用于获取匹配结果中的各项数据,具体如表1所示。
表1 匹配对象常用方法
函数 | 说明 |
---|---|
group([num]) | 获取匹配的字符串,或获取第num个子组的匹配结果 |
start() | 获取匹配对象的开始位置 |
end() | 获取匹配对象的结束位置 |
span() | 获取表示匹配对象位置的元组 |
以search()函数的匹配结果为例,表1中各方法的用法如下所示。
import re
word = 'hello itheima'
match_result = re.search(r'\whe\w', word)
print(match_result) # 输出匹配结果
print(match_result.group()) # 匹配对象
print(match_result.start()) # 起始位置
print(match_result.end()) # 结束位置
print(match_result.span()) # (起始位置,结束位置)
运行代码,结果如下所示:
<_sre.SRE_Match object; span=(7, 11), match='thei'>
thei
7
11
(7, 11)
当正则表达式中包含子组时,Python解释器会将每个子组的匹配结果临时存储到缓冲区中,若用户想获取子组的匹配结果,可使用Match对象的group()方法,示例如下:
words = re.search("(h)(e)", 'hello heooo')
print(words.group(1)) # 获取第1个子组的匹配结果
运行代码,结果如下所示:
h
此外,Match对象还有一个groups()方法,使用该方法可以获取一个包含所有子组匹配结果的元组,示例如下:
words = re.search("(h)(e)", 'hello heooo')
print(words.groups())
运行代码,结果如下所示:
('h', 'e')
若正则表达式中不包含子组,则groups()方法返回一个空元组。