【发布时间】:2014-08-27 15:10:32
【问题描述】:
我正在使用 pandas 数据框,并希望根据描述中的日期创建系列、开始日期和结束日期。我正在使用正则表达式来查找日期的出现,但似乎无法找出如何在第一个日期停止然后继续查找第二个日期。
看这里:How to stop at first occurence of match?
给出了答案
(?s)(\d{1,2}/\d{1,2}/\d{2,4}).*
但这对我不起作用,我仍在捕获所有日期,而不仅仅是第一个。
使用
(\d{1,2}/\d{1,2}/\d{2,4})?
也没有用。
基本上我是想了解
pattern_generic=re.compile('(\d{1,2}\/\d{1,2}\/\d{2,4})') #perhaps will do start and end)
report['Start Date'] = report['Description'].apply(lambda x: re.findall(pattern_start,x))
report['End Date'] = report['Description'].apply(lambda x: re.findall(pattern_end,x))
不确定这是否是查找第一个和第二个日期并将它们放入列中的最佳方法。感谢任何帮助/建议!
编辑:
澄清示例:我有一个数据框,其标题为“描述”列,其中包含各种项目,例如“从 1/2/13-3/4/15 购买的订阅”。我想将两个日期捕获到两列,开始和结束
Description Start Date End Date
'Purchased Subscription from 1/2/13-3/4/15' 1/2/13 3/4/15
【问题讨论】:
-
举个例子会更好。
-
当然,我添加了我正在使用的内容以及我想要实现的目标的示例,如果可以解决问题,请告诉我
-
所以你的输入中有很多行像
'Purchased Subscription from 1/2/13-3/4/15',对吗? -
@Alexis 你试过把
re.findall改成re.search吗?