Часть (\s*\w+\s*\W*\s*)*?
может привести к катастрофическому откату назад, поскольку единственным обязательным шаблоном внутри *?
-квантованной группы является \w+
, и он заключен в другие необязательные шаблоны (\s*
и \W*
могут соответствовать пустым строкам и обратите внимание, что смежные *
-квантованные шаблоны, такие как \s*\W*\s*
match, совпадают с теми же символами, что является плохой практикой, приводящей к катастрофическому откату назад.
Если вы протестируете свое регулярное выражение с mirror banana banannas populatio
, вы получите катастрофическую ошибку возврата.
Лучший способ регулярных выражений в вашем случае, то есть когда вы читаете списки начальных / конечных слов из файла JSON, это регулярное выражение, подобное
(?:leading_word1|leading_word2|...|leading_wordN)(.*?)(?:trailing_word1|trailing_word2|...|trailing_wordN)
Значение, которое вам нужно, будет в группе 1 или во всех значениях в списке, если вы используете re.findall
(вы говорите, что используете Python).