Почему объединенный список должен быть внутри не захватывающей группы, чтобы регулярное выражение могло его интерпретировать? - PullRequest
1 голос
/ 06 марта 2020

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