2014-01-29 80 views
0

我有一个字符串,它看起来像这样:如何使用正则表达式从该字符串中获取日期?

<some_text> February 19, 2009 through March 17, 2009 <some_text> 

我怎么能拿起使用正则表达式的日期,使用Python。

我尝试这样做,看看我能在字符串中的至少匹配,但它并没有发现任何东西:

r'\w*\d{1,2},\w+\d{4}\w+through\w+\d{1,2},\w+\d{4}' 

任何帮助,将不胜感激。

+0

你似乎忘记匹配空格。如果你正在使用're.match',你应该使用're.search'。 – Jerry

+0

我正在使用re.search()...他们的空间.... – Drakkainen

+1

不需要那个详细的'(?i)(?#start_date)[az] + [\ d,] +(? #through)[az] + [] +(?#end_date)[az] + [\ d,] +' – sln

回答

1

如何:

(\w+ \d\d?, \d{4})\b.+?\b(\w+ \d\d?, \d{4})\b 
+0

没有工作:(... – Drakkainen

+0

@ Drakkainen:在哪些方面没有工作?你能更明确吗?第一次约会在第一组,第二次在第二组。 – Toto

+0

是的,如果我可以学习复制和粘贴正确...这个工作完美。谢谢! – Drakkainen

1

您将需要使用re.search做到这一点。

因为这将是一个很长的正则表达式,为了清晰起见,我建议您编译它。

基本的正则表达式看起来像部份:

date_finder = re.compile("(\w+) through (\w+)") 

这将找到“到”分隔的两个字符串。

要访问他们,你将使用

out = data_finder.search(input_str) 

out.group(1) # first paren match 
out.group(2) # second paren match group 

接下来,您将需要检查,看看您的群体实际上是日期字符串或没有。

date_finder = re.compile("([JFMASOND][a-z]+\s+\d{1,2}[\s,]+\d{4}) through") 

这是从访问:

out = date_finder.search(input_str) 
out.group(1) # date string before through 

要获得第二只需要重复上“到”的另一面是正则表达式。正则表达式可能会根据您的输入数据进行一些调整,但您应该明白。

希望有所帮助。

相关问题