Вы должны указать своему регулярному выражению, чтобы каким-то образом сгруппировать списки опций, или он, естественно, подумает, что это один гигантский список с некоторыми элементами, содержащими пробелы.Самый простой способ - использовать группы захвата для каждого слова:
regex=re.compile(r'(Alice|Bob|Carol)\s+(eats|pets|throws)\s+(apples|cats|baseballs)\.', re.IGNORECASE)
Трейлинг не должен быть частью опции.Если по какой-то причине вы не хотите использовать группы захвата (это не повлияет на то, как будет выполнено совпадение), вы можете использовать группы без захвата.Замените (...)
на (?:...)
.
Ваше исходное регулярное выражение интерпретировалось как следующий набор параметров:
Alice
Bob
Carol\seats
pets
throws\sapples.
cats.
baseballs.
Пробелы не разделяют магически опции.Надеюсь, вы поймете, почему ни один из элементов Carol throws baseballs.
, кроме baseballs.
, не присутствует в этом списке.Что-то вроде Carol eats baseballs.
будет соответствовать Carol eats
.