2014-01-29 79 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 

要獲得第二隻需要重複上「到」的另一面是正則表達式。正則表達式可能會根據您的輸入數據進行一些調整,但您應該明白。

希望有所幫助。

相關問題