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

Pandas正则表达式如何匹配多模式提取日期?

解决Pandas中同时提取A6/JT开头字符串的日期部分问题

我明白你的需求——之前能顺利提取A6开头字符串后的8位日期,现在要新增支持JT开头的情况,但用|没成功对吧?这是因为正则表达式的分组逻辑没处理好,我来帮你修正。

第一步:准备测试数据

先把你给出的测试数据转换成DataFrame:

import pandas as pd

d = {'var1': 'A620170101', 'var2': 'JT20170102', 'var3': '', 'var4': 'TG20170102'}
df = pd.DataFrame.from_dict(d, orient='index', columns=['sba'])

第二步:修正正则表达式

之前的r'A6(.{8})'只能匹配A6前缀,要同时兼容A6和JT,需要把这两个前缀放到非捕获组里,确保两种前缀后面的8位日期都能被捕获:

df['date'] = df['sba'].str.extract(r'(?:A6|JT)(.{8})', expand=False)
  • (?:A6|JT):非捕获组,匹配A6或JT但不捕获这个前缀本身
  • (.{8}):捕获后面的8位字符(也就是你的日期部分)

第三步:查看结果

运行后DataFrame的输出会是这样:

sbadate
var1A62017010120170101
var2JT2017010220170102
var3NaN
var4TG20170102NaN

可以看到:

  • 成功提取了A6和JT开头的日期
  • 空字符串和TG开头的不匹配项返回NaN,符合预期

为什么之前用|没成功?

如果你的写法是r'A6|JT(.{8})',这会被正则引擎解析为:匹配A6(后面没有捕获组)或者匹配JT加上后面的8位。这样A6开头的字符串就只能匹配到A6,无法捕获后面的日期,所以才会失败。把前缀放到同一个组里就能解决这个问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:35:45