如何从包含无关字符的文本文件中提取日期?

时间:2017-04-23 09:58:55

标签: python string data-cleaning

下面的

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'?

那么,简而言之,我如何从Thursday 31 May 2001获得List1(以任何顺序)?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)