本文最后更新于 252 天前,其中的信息可能已经有所发展或是发生改变。
- 给定一段文本,要求提取其中出现的所有合法日期;
- 将这些日期统一格式,从小到大排序并去重后,并返回一个列表。
- 首先利用正则表达式,提取所有的日期:
- 可能出现的日期格式:
- 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) |