学科分类
目录

匹配对象

使用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()方法返回一个空元组。

点击此处
隐藏目录