You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Regex解析三种格式的日期字符串?(禁用Datetime库)

解决日期字符串的正则解析问题

没问题,我来帮你用正则表达式搞定这三种格式的日期解析!核心思路是用字符类匹配不同的分隔符(.、-、/),同时通过捕获分组精准提取日、月、年信息。

完整代码实现

import re

date = "13.06.2020"
date2 = "13-06-2020"
date3 = "13/06/2020"

for i in [date, date2, date3]:
    # 正则表达式:捕获两位日 + 任意分隔符 + 两位月 + 任意分隔符 + 四位年
    finder = re.findall(r'(\d{2})[./-](\d{2})[./-](\d{4})', i)
    if finder:  # 确保匹配成功(避免非法格式报错)
        day, month, year = finder[0]
        print(f"day: {day}")
        print(f"month: {month}")
        print(f"year: {year}")
        print("---")

正则表达式拆解

  • (\d{2}):捕获分组,匹配两位数字(对应日/月),括号会把匹配到的内容单独保存,方便后续提取
  • [./-]:字符类,匹配任意一种分隔符(点、横杠、斜杠),把横杠放在最后是为了避免被当成“范围符号”(比如[a-z]的横杠)
  • (\d{4}):捕获分组,匹配四位数字(对应年份)

为什么你的原代码没成功?

你之前用re.findall没得到预期结果,大概率是正则表达式的问题:

  • 没有同时兼容三种不同的分隔符,只写了某一种(比如只匹配.)
  • 没有用捕获分组()包裹需要提取的内容,导致findall返回的是整个匹配串,而不是拆分后的日/月/年

额外小提示

如果后续需要兼容一位数的日/月(比如3.6.2020),可以把正则里的\d{2}改成\d{1,2},这样就能匹配1-2位的数字了。

内容的提问来源于stack exchange,提问作者Murat Demir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:22:51