混合字符和数字日期正则表达式

时间:2017-08-04 07:35:10

标签: python regex date text-mining

我需要找到一个Python正则表达式,以匹配原始文本文件中的每个有效日期。我将文本分成行并将它们放入Pandas系列中,现在的目标是仅提取每行中的日期以获得一系列日期。我能够匹配大多数数字日期格式,但是当我不得不处理文字月份(1月,1月,2月,2月......)时,我就停止了。特别是,我需要一个符合以下格式的正则表达式(或其中一组):

- Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
- 20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
- Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
- Feb 2009; Sep 2009; Oct 2010

任何帮助将不胜感激, 提前谢谢你!

1 个答案:

答案 0 :(得分:1)

根据我所做的评论,建议使用split和strip从输出字符串生成可能日期的列表,然后将其提供给dateutils.parser.parse()以转换为可以操作的正确日期时间对象你喜欢的。

可能的实施如下:

test = '''- Mar-20-2009; Mar 20, 2009; March 20, 2009; Mar. 20, 2009; Mar 20 2009;
- 20 Mar 2009; 20 March 2009; 20 Mar. 2009; 20 March, 2009
- Mar 20th, 2009; Mar 21st, 2009; Mar 22nd, 2009
- Feb 2009; Sep 2009; Oct 2010'''
list_of_dates = []
for line in test.split('\n'):
    for date in line.split(';'):
        list_of_dates.append(date.strip(' - '))
from dateutil.parser import parse

def is_date(string):
    try: 
        parse(string)
        return True
    except ValueError:
        return False
found_dates = []
for date in list_of_dates:
    if is_date(date):
       found_dates.append(parse(date))
for date in found_dates:
    print(date)

结果:

2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-20 00:00:00
2009-03-21 00:00:00
2009-03-22 00:00:00
2009-02-04 00:00:00
2009-09-04 00:00:00
2010-10-04 00:00:00