Python 为什么联接列表必须位于非捕获组中,正则表达式才能对其进行解释?

Python 为什么联接列表必须位于非捕获组中,正则表达式才能对其进行解释?,python,regex,Python,Regex,因此,我试图构建一个正则表达式,搜索数字的出现,后跟一个空格,后跟许多可能的关键字中的一个(在本例中由test\u cases表示) 下面的第一个正则表达式成功地做到了这一点,但我不明白它为什么会起作用。我对捕获组的理解是,它们允许您在组上放置量词,并帮助指定返回的数据。为什么此示例需要位于非捕获组中才能正确处理 test_string = "251 to 300 Vitality" test_cases = ["Damage", "Pods", "Chance", "Vitality"] p

因此,我试图构建一个正则表达式,搜索数字的出现,后跟一个空格,后跟许多可能的关键字中的一个(在本例中由
test\u cases
表示)

下面的第一个正则表达式成功地做到了这一点,但我不明白它为什么会起作用。我对捕获组的理解是,它们允许您在组上放置量词,并帮助指定返回的数据。为什么此示例需要位于非捕获组中才能正确处理

test_string = "251 to 300 Vitality"
test_cases = ["Damage", "Pods", "Chance", "Vitality"]

print(re.findall(r'\d+\s(?:{})$'.format('|'.join(test_cases)), test_string)) # works
print(re.findall(r'\d+\s({})$'.format('|'.join(test_cases)), test_string)) # doesn't work
print(re.findall(r'\d+\s{}$'.format('|'.join(test_cases)), test_string)) # doesn't work
输出:

['300 Vitality']                                                                                                                      
['Vitality']                                                                                                                          
['Vitality'] 

因为
re.findall()
根据捕获组的数量记录为不同的行为。0:返回整体匹配,1:仅返回该组,2+:返回所有组的元组。在这种情况下,第三种情况是否仍应返回所需的“300 Vitality”输出,或者我的正则表达式是否有问题?在第三种正则表达式中,
\d+\s
仅是第一种选择的一部分,而
$
只是最后一种选择的一部分。看待#3的另一种方式是它与“Vitality”匹配,而不管它前面是否有数字。因为
re.findall()
被记录为根据捕获组的数量而表现不同。0:返回整体匹配,1:仅返回该组,2+:返回所有组的元组。在这种情况下,第三种情况是否仍应返回所需的“300 Vitality”输出,或者我的正则表达式是否有问题?在第三种正则表达式中,
\d+\s
仅是第一种选择的一部分,而
$
只是最后一个选项的一部分。看待#3的另一种方式是它与“Vitality”匹配,而不管它前面是否有数字。