使用日历模块可以让您具备一些全球意识:
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模块更改我的区域设置:
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}"
现在我的脚本也可以为我的高卢朋友运行,而且非常容易。
(你可能会想为什么我必须从[1:]中切割month_abbr列表 - 这个列表在位置0处以空字符串开头,因此如果您使用find()查找特定月份的缩写,则将返回1-12之间的数字,而不是0-11之间的数字。)
-- Paul