如何在Python字符串中识别多个日期并筛选最早、最晚日期?
解决datefinder无法识别dd/mm/yyyy格式日期的问题
你的问题出在datefinder默认的日期解析逻辑更偏向美式日期格式(mm/dd/yyyy),像23/01/2023这种日/月/年的格式会因“23超过月份最大取值12”被判定为无效,导致无法识别。
下面是修正后的代码,既能正确识别日/月/年格式的日期,还能提取出最早和最晚的日期:
import re from datetime import datetime string = "/plot 23/01/2023 24/02/2021 /cmd" # 匹配所有xx/xx/xxxx格式的日期字符串 date_pattern = r'\b\d{2}/\d{2}/\d{4}\b' date_strings = re.findall(date_pattern, string) # 将字符串转换为datetime对象 dates = [] for date_str in date_strings: try: # 优先按日/月/年格式解析 date_obj = datetime.strptime(date_str, '%d/%m/%Y') dates.append(date_obj) except ValueError: # 兼容美式月/日/年格式(可选) try: date_obj = datetime.strptime(date_str, '%m/%d/%Y') dates.append(date_obj) except ValueError: continue if dates: Date1 = min(dates) Date2 = max(dates) print(f"最早日期: {Date1.strftime('%d/%m/%Y')}") print(f"最晚日期: {Date2.strftime('%d/%m/%Y')}") else: print("no date in string")
代码说明:
- 用正则表达式
\b\d{2}/\d{2}/\d{4}\b精准提取所有符合日期格式的字符串 - 优先按
%d/%m/%Y(日/月/年)解析,失败后尝试%m/%d/%Y(月/日/年),兼顾不同格式兼容性 - 直接用
min()和max()获取最早、最晚的日期对象
如果一定要用datefinder,需要自定义日期匹配规则,不过步骤相对繁琐,不如上述方法直接可控。
内容的提问来源于stack exchange,提问作者Marc Kch
相关产品推荐
相关产品推荐

