使用日历模块给你一点全球意识:
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}"
现在我的脚本也可以为我的 Gallic 朋友运行,几乎没有什么麻烦。
(您可能想知道为什么我必须从 [1:] 切分 month_abbr 列表 - 此列表以位置 0 的空字符串开头,因此如果您使用 find() 查找特定月份的缩写,您将从 1 到 12 取回一个数字,而不是从 0 到 11。)
-- 保罗