2017-04-23 60 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

相关问题