python正则表达式:re.findall()在交替时表现不正常

时间:2017-07-21 15:14:53

标签: python regex

我有以下代码:

testREString = '(hello | goodbye) \s darkness \s my \s old \s friend'
testString = 'sound of silence: goodbye darkness my old friend'
exp = re.compile(testREString, re.VERBOSE)
print(exp.findall(testString))

然后返回:['goodbye']我希望它返回完整的句子 - 事实上,使用exp.search(testString)它已正确地选出了句子的其余部分。那么,为什么没有显示完整的匹配?

感谢您的时间。

2 个答案:

答案 0 :(得分:3)

正则表达式中的

(...)定义了一个捕获组。

如果您的表达式定义了任何内容,

re.findall将返回捕获组的内容。

您可以将其设为非捕获组(?:hello|goodbye)以避免这种情况发生。见What is a non-capturing group?

答案 1 :(得分:2)

khelwood解释了为什么findall()表现得这样。如果您想在不更改正则表达式的情况下捕获整个匹配项,请使用

exp.group(0)