【发布时间】:2020-03-04 07:57:35
【问题描述】:
我正在处理一个需要提取所有可用日期的数据集。日期可以是以下格式:
04/20/2009; 04/20/09; 4/20/09; 4/3/09
Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
Feb 2009; Sep 2009; Oct 2010
6/2008; 12/2009
2009; 2010
我写了以下代码:
df['dates'] = df['text'].str.extract(r'((?:\d{1,2}[/ ])?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec[a-z.,]*[- ])?(?:\d{1,2}[a-z-, /]{1,4})?(?:\d{2,4}))')
它给了我正确的结果,除了一些文本,例如:
文本输出
实验室:B12 969 2007\n 12 969 #应该给 2007
35 年,1985 年卖出\n 35 #应该给 1985
x 14 岁去世的人... 14 #不应该考虑
我尝试将提取代码更改为
r'((?:\d{1,2}[/ ])?(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec[a-z.,]*[- ])?(?:\d{1,2}[a-z-, ]{1,4})?(?:[/]\d{2})?(?:\d{4})?)'
但是整个结果都变坏了
【问题讨论】:
-
尝试对月份模式进行分组 - regex101.com/r/Uebj4g/1 您想要涵盖的可能日期模式有多大?
-
还是一样
-
怎么都一样?你看过在线演示吗?另见分组版本:regex101.com/r/Uebj4g/2
-
是的,我看到了,请检查块引用中提到的字符串。对于那些不匹配的字符串,或匹配不正确的第一次出现
-
Lab: B12 969 2007\n 这应该输出为 2007