首页 > 解决方案 > 为什么加入列表必须位于非捕获组中才能使正则表达式能够解释它?

问题描述

所以我正在尝试构建一个正则表达式,它搜索出现的数字,后跟空格,后跟许多可能的关键词之一(test_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'] 

标签: pythonregex

解决方案


推荐阅读