Используйте модуль календаря, чтобы дать вам немного глобального понимания:
date_expr = r"\d{2} (?:%s) \d{4}" % '|'.join(calendar.month_abbr[1:])
print date_expr
print re.findall(date_expr, source_text)
Для меня это создает date_expr как:
"\d{2} (:?Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4}"
Но если я изменю свою локаль, используя модуль локали:
locale.setlocale(0, "fr")
Я сейчас ищу месяцы по-французски:
"\d{2} (?:janv.|févr.|mars|avr.|mai|juin|juil.|août|sept.|oct.|nov.|déc.) \d{4}"
Хм, это первый раз, когда я пробовал сокращения французского месяца, возможно, мне нужно сделать некоторую очистку:
date_expr = r"\d{2} (?:%s) \d{4}" % '|'.join(
m.title().rstrip('.') for m in calendar.month_abbr[1:])
Теперь я получаю:
"\d{2} (?:Janv|Févr|Mars|Avr|Mai|Juin|Juil|Août|Sept|Oct|Nov|Déc) \d{4}"
И теперь мой сценарий будет работать и для моих галльских друзей, с очень небольшими проблемами.
(Вы можете задаться вопросом, почему мне пришлось нарезать список month_abbr из [1:] - этот список начинается с пустой строки в позиции 0, так что если вы используете find () для поиска аббревиатуры конкретного месяца, вы будете верните число от 1 до 12, а не от 0 до 11.)
- Пол