Регулярные выражения для поиска наименования месяца в тексте
Пытаюсь найти те предложения, в которых содержится название месяца как даты, которая может быть записано по-разному, например “апр”, “апрель(и все его склонения)”, “apr”, “april” и “04” (предложение в нижнем регистре). При этом в идеале нужно, чтобы предыдущий и последующий символ были только либо пробелом “ ”, либо точкой “.”, либо одинарной кавычкой “'”, либо их вообще не было. Нужно просто найти первое вхождение, а где оно, есть ли дальше другие - неважно.
Написал такое выражение:
re.match(r'.*?(апр(?:ель|еля|елю|елем|еле)|apr(?:il)|04(?:\W)?)', sentence), но оно покрывает не все описанные выше случаи - к примеру, не срабатывает на "В апр 2020 задолженность" и ложно срабатывает на “У нашей заправки задолженность”, “апрельская задолженность” и на “044”.
Подскажите, как должно выглядеть правильное выражение, заранее спасибо)
Ответы (1 шт):
Используйте
re.search(r'\b(апр(?:ел(?:[ьяюе]|ем)?)?|apr(?:il)?|04)\b', sentence)
Подробности
\b- граница слова(- начало подмаски №1апр- строкаапр(?:ел(?:[ьяюе]|ем)?)?-ел, после которого следует один или ноль (т.е. опционально)ь,я,ю,еилием
|- илиapr- строкаapr(?:il)?- необязательная последовательности символовil
|- или04-04
)- конец подмаски\b- граница слова