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

Python datefinder仅年份场景下日期提取失效的解决方案咨询

解决仅年份场景下的日期识别问题

datefinder库对包含月份、日的日期识别效果不错,但默认不会将单独的4位数字或年份范围识别为日期。要同时兼容各类完整/不完整日期格式,可通过正则预处理纯年份+datefinder处理其他格式的组合方案实现需求。

实现思路

  1. 用正则提前捕获输入中的单个纯年份(4位数字)和年份范围(如2014 - 2018),手动补全为当年1月1日的日期对象
  2. 调用datefinder处理带月份、日的日期格式,确保兼容性
  3. 对识别到的日期去重、排序,最后格式化为YYYY/MM/DD的字符串

完整代码示例

import re
import datefinder
from datetime import datetime

def extract_and_format_dates(input_str):
    dates = []
    
    # 匹配单个4位年份或年份范围(支持空格分隔的连字符)
    year_pattern = re.compile(r'\b(\d{4})\s*-\s*(\d{4})\b|\b(\d{4})\b')
    year_matches = year_pattern.findall(input_str)
    
    for match in year_matches:
        # 处理年份范围
        if match[0] and match[1]:
            start_year = int(match[0])
            end_year = int(match[1])
            dates.append(datetime(start_year, 1, 1))
            dates.append(datetime(end_year, 1, 1))
        # 处理单个年份
        elif match[2]:
            year = int(match[2])
            # 可添加年份范围校验,比如只处理1900-2100之间的年份
            if 1900 <= year <= 2100:
                dates.append(datetime(year, 1, 1))
    
    # 用datefinder识别带月份/日的日期
    for df_date in datefinder.find_dates(input_str):
        dates.append(df_date)
    
    # 去重(避免重复识别同一日期,比如带月份的年份会被正则和datefinder同时捕获)
    unique_dates = list({dt.date(): dt for dt in dates}.values())
    # 按时间排序
    unique_dates.sort()
    
    # 格式化为目标字符串
    return [dt.strftime('%Y/%m/%d') for dt in unique_dates]

# 测试各类场景
test_inputs = [
    '2014 - 2018',
    '2014',
    'May 2014',
    '08/2014',
    '03/10/2018',
    '01 March 2013'
]

for input_str in test_inputs:
    print(f"输入: {input_str}")
    print("输出:")
    print('\n'.join(extract_and_format_dates(input_str)))
    print('---')

关键说明

  • 正则匹配规则可根据需求调整,比如支持中文连字符(—)或更严格的年份边界校验
  • 若需过滤不合理年份(如1000或3000),可在添加日期对象前加入年份范围判断
  • datefinder会自动识别多种日期格式(如MM/YYYY、DD Month YYYY等),无需额外处理
  • 去重步骤保留更精确的日期(比如May 2014会保留2014/05/01而非2014/01/01)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:05:22