Python提取文本中出现的全部合法日期

更好的阅读体验 \color{red}{更好的阅读体验} 更好的阅读体验

需求


  • 给定一段文本,要求提取其中出现的所有合法日期;
  • 将这些日期统一格式,从小到大排序并去重后,并返回一个列表。

思路


  • 首先利用正则表达式,提取所有的日期:
  • 可能出现的日期格式:
    • xxxx.xx.xx
    • xxxx-xx-xx
    • xxxx年xx月xx日
    • xxxx年xx月xx号
  • 将所有提取到的日期转换成为 xxxx.xx.xx 的标准格式;
  • 利用 datetime 库判断日期是否合法,然后排序去重即可。

代码


from datetime import datetime
import re


def extractDates(text):
    pattern = r"\b(\d{4})[年.-](\d{1,2})[月.-]?(\d{1,2})?[日号]?\b"
    dates = sorted(
        [
            f"{year}.{month.zfill(2)}.{day.zfill(2) if day else '01'}"
            for year, month, day in re.findall(pattern, text)
            if isValidDate(f"{year}.{month.zfill(2)}.{day.zfill(2) if day else '01'}")
        ],
        key=lambda x: tuple(map(int, x.split('.')))
    )
    return dates


def isValidDate(dateStr):
    try:
        datetime.strptime(dateStr, "%Y.%m.%d")
        return True
    except ValueError:
        return False


text = "2022.2.31, 2020.2.29-2022.3.1, 2023.10, 2023.1, 2023年7月5日, 2023年7月, 2023年7月5号, 2023-07-05, 2023-7-5"
dates = extractDates(text)
print(dates)  # outputs: ['2020.02.29', '2022.03.01', '2023.01.01', '2023.07.01', '2023.07.05', '2023.07.05', '2023.07.05', '2023.07.05', '2023.10.01']
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪漫主义狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值