确定OR正则表达式与字符串匹配的片段

时间:2016-04-21 10:31:54

标签: python regex string

>>> import re
>>> s = "These are the words in a sentence"
>>> regex = re.compile('are|words')
>>> [m.start(0) for m in re.finditer(regex,s)]
[6, 14]

是否有可能获得are匹配索引[6]words匹配索引[14]的信息,而无需执行任何额外的字符串操作?也许就像循环并在这些返回的索引处找到正则表达式的每个片段,即614

正则表达式中是否有直接方法知道基于OR的正则表达式的哪个片段已匹配?

2 个答案:

答案 0 :(得分:1)

这将有效

print([(re.findall(regex,s)[i], m.start(0)) for i,m in enumerate(re.finditer(regex,s))])

<强> Ideone Demo

答案 1 :(得分:1)

可以使用re.MatchObject.group

完成此操作

来自文档

  

返回匹配的一个或多个子组。 如果只有一个参数,则结果为单个字符串

(强调我的)

代码可以写成

>>> import re
>>> s = "These are the words in a sentence"
>>> regex = re.compile('are|words')
>>> [(m.start(0),m.group()) for m in re.finditer(regex,s)]
[(6, 'are'), (14, 'words')]