Skip to main content
 首页 » 编程设计

python之使用 python 正则表达式进行日期匹配

2025年05月04日34cmt

我在下面的正则表达式匹配中做错了什么

>>> import re 
>>> d="30-12-2001" 
>>> re.findall(r"\b[1-31][/-:][1-12][/-:][1981-2011]\b",d) 
[] 

请您参考如下方法:

[1-31] 匹配 1-3 和 1,它基本上是 1、2 或 3。您不能匹配数字范围除非它是 0-9 的子集。这同样适用于 [1981-2011],它恰好匹配一个字符,即 0、1、2、8 或 9。

最好的解决方案是简单地匹配任何 数字,然后使用 python 本身检查数字。诸如 31-02-2012 之类的日期没有任何意义 - 并且很难进行正则表达式检查。让它也正确处理闰年会使它变得更加困难或不可能。这是一个匹配任何看起来像 dd-mm-yyyy 日期的正则表达式:\b\d{1,2}[-/:]\d{1,2}[-/:]\d{4}\b

但是,我强烈建议不要允许 -、: 和 / 中的任何一个,因为 : 通常是用于时间,/ 通常用于美国书写日期的方式 (mm/dd/yyyy) 和 - 用于 ISO 方式 (yyyy-mm-dd)。根本不处理 EU dd.mm.yyyy 语法。

如果字符串只包含日期,则根本不需要正则表达式 - 使用 strptime()相反。

总而言之,告诉用户您期望的日期格式并解析该格式,拒绝其他任何格式。否则你会得到模棱两可的情况,例如 04/05/2012(是 4 月 5 日还是 5 月 4 日?)。