>>> 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]
的信息,而无需执行任何额外的字符串操作?也许就像循环并在这些返回的索引处找到正则表达式的每个片段,即6
和14
。
正则表达式中是否有直接方法知道基于OR的正则表达式的哪个片段已匹配?
答案 0 :(得分:1)
这将有效
print([(re.findall(regex,s)[i], m.start(0)) for i,m in enumerate(re.finditer(regex,s))])
<强> Ideone Demo 强>
答案 1 :(得分:1)
来自文档
返回匹配的一个或多个子组。 如果只有一个参数,则结果为单个字符串
(强调我的)
代码可以写成
>>> 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')]