You need to enable JavaScript to run this app. 如何编写正则匹配含Oct,16 , 2012的多日期格式并提取pandas序列中日期
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则匹配含Oct,16 , 2012的多日期格式并提取pandas序列中日期

解决方法

匹配所需日期格式的正则

要匹配Oct, 16 , 2012这类月份缩写加逗号分隔的日期,以及12/4/2012这类斜杠分隔的日期,可以用以下正则表达式:

(?:[A-Z][a-z]{2},\s*\d{1,2}\s*,\s*\d{4}|\d{1,2}/\d{1,2}/\d{4})

各部分含义:

  • [A-Z][a-z]{2}:匹配首字母大写、后两位小写的3字符月份缩写(如Oct、Nov)
  • \s*:匹配任意数量的空白字符,兼容日期前后多余的空格
  • \d{1,2}:匹配1-2位的日期/月份数值
  • \d{4}:匹配4位年份
  • |:分支匹配,同时支持两种日期格式
  • 外层(?:)表示非捕获分组,提取时直接返回完整的日期字符串

pandas 提取实现步骤

直接调用pandas字符串内置的findall方法即可批量提取,示例代码如下:

import pandas as pd

# 你的原始pandas序列,这里替换成你自己的变量名
date_series = pd.Series([
    "2012-05-25 00:00:00",
    "2012-08-28 00:00:00",
    "2012-08-22 00:00:00",
    "2012-10-16 00:00:00",
    "Oct, 16 , 2012/ Nov, 1, 2012",
    "2012-05-20 00:00:00",
    "2012-10-30 00:00:00",
    "2012-11-12 00:00:00",
    "2012-12-04 00:00:00",
    "12/4/2012, 16/4/2012"
])

# 提取所有匹配的日期
date_pattern = r'(?:[A-Z][a-z]{2},\s*\d{1,2}\s*,\s*\d{4}|\d{1,2}/\d{1,2}/\d{4})'
# 如果只需要索引为4和9的两行,改为 date_series.loc[[4,9]]
extracted_dates = date_series.str.findall(date_pattern)

# 扁平化结果并去重得到最终列表
result = list({date for sub in extracted_dates for date in sub if sub})

如果你需要把提取到的字符串转成标准datetime格式,可以分别处理两种格式:

  • 月份缩写格式:pd.to_datetime(date_str, format='%b, %d , %Y')
  • 斜杠分隔格式:pd.to_datetime(date_str, format='%d/%m/%Y')(示例中16为日期,所以是日/月/年顺序)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 14:15:08