Что может вызывать постоянное поведение в операции match () регулярного выражения (с модулем re Python)?
Я сейчас ломаю себе голову, пытаясь решить проблему, которая ставила меня в тупик часами. Почему висит строка ниже?
re.compile(r'.*?(now|with that|at this time|ready|stop|wrap( it|) up|at this point|happy|pleased|concludes|concluded|we will|like to)(,)*(( |\n)[a-z]+(\'[a-z]+)*,*){0,20}( |\n)(take|for|to|open|entertain|answer|address)(( |\n|)[a-z]+(\'[a-z]+)*,*){0,20}( |\n|)(questions|Q *& *A).*?', re.DOTALL| re.IGNORECASE).match("I would now like to turn the presentation over to your host for today's call, Mr. Mitch Feiger, please proceed.")
Короче говоря, я использую match (), регулярное выражение r'.*?(now|with that|at this time|ready|stop|wrap( it|) up|at this point|happy|pleased|concludes|concluded|we will|like to)(,)*(( |\n)[a-z]+(\'[a-z]+)*,*){0,20}( |\n)(take|for|to|open|entertain|answer|address)(( |\n|)[a-z]+(\'[a-z]+)*,*){0,20}( |\n|)(questions|Q *& *A).*?'
А текст такой: "I would now like to turn the presentation over to your host for today's call, Mr. Mitch Feiger, please proceed."
Я понимаю, что моё регулярное выражение - это что-то вроде беспорядка, оно было построено с течением времени, чтобы несколько неуклюже соответствовать параграфам, в которых ораторы объявляют о начале сеанса вопросов. Мое основное замешательство сейчас заключается в попытке найти то, что может быть причиной того, что, как я полагаю, является непрерывным поиском.
Он застревает на многих других фрагментах текста, используемых моей программой, но далеко не на всех (программа обрабатывает тысячи текстовых файлов, каждый из которых содержит ~ 100 таких фрагментов текста, с которыми необходимо выполнить сопоставление), и Я не вижу никаких общих факторов. Чтобы было ясно, это не должен возвращать совпадение, но эта проверка действительно должна быть сделана, и я не могу понять, почему она зависает, как это происходит.
В более общем смысле, что может привести к бесконечному зависанию соответствия регулярного выражения Python? Я бы хотел получить информацию, чтобы я мог решить проблему сам, но на этом этапе я бы взял дешевый ответ ...