2011-06-10 96 views
3

我有一個腳本解析出表示日期和時間的電子郵件標題中的字段。是這些字符串的一些例子如下:從Python中的字符串中提取日期時間的最佳方法

Fri, 10 Jun 2011 11:04:17 +0200 (CEST) 
Tue, 1 Jun 2011 11:04:17 +0200 
Wed, 8 Jul 1992 4:23:11 -0200 
Wed, 8 Jul 1992 4:23:11 -0200 EST 

之前,我在我的東西相當不錯的只是用datetime.datetime.strptime像這樣的一些字符串的末端面臨的CEST/EST部分:

msg['date'] = 'Wed, 8 Jul 1992 4:23:11 -0200' 
mail_date = datetime.datetime.strptime(msg['date'][:-6], '%a, %d %b %Y %H:%M:%S') 

我試圖把一個正則表達式放在一起來匹配字符串的日期部分,但最後卻排除了時區信息,但是我遇到了正則表達式問題(我無法匹配冒號)。

正在使用正則表達式來解析上述所有示例的最佳方式?如果是這樣,有人可以分享一個匹配這些例子的正則表達式嗎?最後,我期待有一個日期時間對象。

回答

7

python time to age part 2, timezones

from email import utils 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200 (CEST)') 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17 +0200') 
utils.parsedate_tz('Fri, 10 Jun 2011 11:04:17') 

輸出是:

(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200) 
(2011, 6, 10, 11, 4, 17, 0, 1, -1, 7200) 
(2011, 6, 10, 11, 4, 17, 0, 1, -1, None) 
+0

我看到老RFC822模塊也有類似的功能,但我不知道email.utils的。謝謝。 – ajt 2011-06-10 14:31:56

2

也許我誤解了你的問題,但不會簡單split就夠了嗎?

#!/usr/bin/python 

d = ["Fri, 10 Jun 2011 11:04:17 +0200 (CEST)", "Tue, 1 Jun 2011 11:04:17 +0200", 
    "Wed, 8 Jul 1992 4:23:11 -0200", "Wed, 8 Jul 1992 4:23:11 -0200 EST"] 

for i in d: 
    print " ".join(i.split()[0:5]) 


Fri, 10 Jun 2011 11:04:17 
Tue, 1 Jun 2011 11:04:17 
Wed, 8 Jul 1992 4:23:11 
Wed, 8 Jul 1992 4:23:11 
相關問題