2017-04-23 41 views
0

List1以下是使用Python 2.7在圖像上使用OCR處理創建的。如何從包含多餘字符的文本文件中提取日期?

List1 = ["ERNR'W\xe2\x80\x98IWW/ftfi M '* \xe2\x80\x98\r\n", '\xe2\x80\x98 L n 4\r\n', 'May 2001\r\n', '31 Thursday ,_,,\r\n', '(161-214)\r\n', '0700\r\n'] 

它包括我希望過濾掉的信息,特別是日期信息,即Thursday 31 May 2001

我試圖在名單拆分項目獲得這個名單:

["'*", '(161-214)', ',_,,', '0700', '2001', '31', '4', 'L', 'M', 'May', 'Thursday', 'n'] 

我有一年沒有問題過濾掉,一個月或一週的日子,所以我可以實現Thursday May 2001。 但是,我無法想出一個過濾月份的日期的方法 - 在這個例子中,區分多餘的'4'和所需的'31'。

月中的某一天(此處爲31)總是出現在星期幾的旁邊。 有沒有辦法可以用這個事實來提取'31'?

因此,簡而言之,我怎麼能從List1得到Thursday 31 May 2001(以任何順序)?

回答

0

你可以找一個數,然後用正則表達式工作日:

import re 

List1 = ["ERNR'W\xe2\x80\x98IWW/ftfi M '* \xe2\x80\x98\r\n", '\xe2\x80\x98 L n 4\r\n', 'May 2001\r\n', '31 Thursday ,_,,\r\n', '(161-214)\r\n', '0700\r\n'] 
day_and_weekday = re.compile('(\d+) ((mon|tue|wednes|thurs|fri|satur|sun)day)', re.I) 

for text in List1: 
    match = day_and_weekday.match(text) 
    if match: 
    print('Day : %s' % match.group(1)) 
    print('Weekday : %s' % match.group(2)) 

它輸出:

Day : 31 
Weekday : Thursday 
+0

Eric Duminil。這很快,非常有幫助。我可以用它來得到我想要的。 –

0

如果你不想使用正則表達式,這裏是另一種解決方案。

List1 = ["ERNR'W\xe2\x80\x98IWW/ftfi M '* \xe2\x80\x98\r\n", '\xe2\x80\x98 L n 4\r\n', 'May 2001\r\n', '31 Thursday ,_,,\r\n', '(161-214)\r\n', '0700\r\n'] 

days = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'] 

for string in List1: 
    for day in days: 
     index = string.lower().find(day) 
     if index != -1: 
      dayNum = string[:index] 

print('Day: ' + dayNum) 
+0

歡迎來到SO。請閱讀此[如何回答](http://stackoverflow.com/help/how-to-answer)以提供高質量的答案。 – thewaywewere

相關問題