Итак, я пытаюсь построить регулярное выражение, которое ищет вхождение цифр, за которыми следует пробел, за которым следует одно из многих возможных ключевых слов (в данном случае это 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']