我正在使用熊猫数据帧,并希望创建到系列,开始日期和结束日期内的描述。我正在使用正则表达式来查找日期的出现次数,但似乎找不到如何在第一次约会时停止,然后继续查找第二次约会。
看这里: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))不确定这是否是查找第一个和第二个日期并将它们放入列的最佳方法。如有任何帮助/建议,欢迎光临!
编辑:
举例说明:我有一个数据框,它有一个标题为“Description”的列,其中包含各种项目,例如“从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发布于 2014-08-27 23:20:21
我会用这个:
(?s)\b(\d{1,2}/\d{1,2}/\d{2,4})\b-\b(\d{1,2}/\d{1,2}/\d{2,4})\b开始日期在组%1中,结束日期在组% 2中。
发布于 2014-08-27 23:19:07
你可以使用下面的正则表达式,
(?s)(\d{1,2}/\d{1,2}/\d{2,4})-(\d{1,2}/\d{1,2}/\d{2,4}).*DEMO
将组索引1中的字符分配给Start Date,将组索引2中的字符分配给End Date
>>> s = """'Purchased Subscription from 1/2/13-3/4/15' 1/2/13 3/4/15
foo 1/2/13-3/4/15' 5/2/13 6/4/15
1/2/13-3/4/15' 7/2/13 8/4/15
1/2/13-3/4/15' 9/2/13 10/4/15"""
>>> m = re.search(r'(?s)(\d{1,2}\/\d{1,2}\/\d{2,4})-(\d{1,2}\/\d{1,2}\/\d{2,4}).*', s)
>>> m.group(1)
'1/2/13'
>>> m.group(2)
'3/4/15'
>>> m = re.findall(r'(\d{1,2}\/\d{1,2}\/\d{2,4})-(\d{1,2}\/\d{1,2}\/\d{2,4}).*', s, re.DOTALL)
>>> m
[('1/2/13', '3/4/15')]发布于 2014-08-27 23:22:31
.*'\s+(\d+\/\d+\/\d+)\s+(\d+\/\d+\/\d+)Try this.Start日期将采用group1格式,结束日期采用group2格式。
请参阅Demo:
http://regex101.com/r/zN5mL9/1
https://stackoverflow.com/questions/25530807
复制相似问题