我试图使用regex模式匹配日期模式25.8.2020。我用[d]{1,2}.[d]{1,2}。[d]{4}来匹配这个。但问题是,如果有一些序列,如454.9451、2021-2022等,它们也会被匹配。我怎么能写一个正则表达式模式正好匹配只有dd.mm.yyyy格式
我建议使用strptime
以您期望的格式验证日期字符串:
def validate(date_text):
try:
datetime.datetime.strptime(date_text, '%d.%m.%Y')
except ValueError:
raise ValueError("invalid date string " + date_text)
inp = ['25.8.2020', '2020-12-31']
for i in inp:
validate(i)
这个打印:
ValueError: invalid date string 2020-12-31
使用strptime
相对于纯正则表达式的潜在优势是后者也可能接受匹配模式但无效日期的字符串。例如,模式d{2}.d{2}.d{4}
本身允许出现像30.02.2021
这样的日期,而这些日期实际上并不存在。
试试这个:[0-3]*d.[01]*d.d{4}
使用.
代替.
例子:regex101