在python中提取最大日期字符串

时间:2014-11-14 10:25:14

标签: python

我正在尝试抓取网站并从网页抓取数据。该页面有一些字符串如下。从这些数据中,我需要从字符串中找到最大日期并将其存储到表中。我怎样才能做到这一点?

a = "January 13-17, 2014"
b = " Mar. 19-22, 2012 and April 10-12, 2012"
c = " Nov. 30 - Dec. 3, 2009"
d = "October 29-November 2, 2012"

我需要输出

January 17, 2014
April 12, 2012
Dec 3, 2009
November 2,2012

3 个答案:

答案 0 :(得分:0)

我建议您查看dateutil - 它有一个通用的解析器,用于返回datetime个对象的日期值。从那里你可以根据需要简单地输出/比较它们。

答案 1 :(得分:0)

对于这些示例值,您可以使用此类正则表达式:

([\w\.]+) \d*-*(\d+), (\d{4})$

但事实上,字符串以年份(第3组)结束,前面是最​​大日期(第2组),前面是最​​大月份(第1组)。

此假设可能不适用于其他格式的日期或其他顺序。

答案 2 :(得分:0)

我设法找到了这个问题的答案。

import re

a = "January 13-17, 2014"
b = " Mar. 19-22, 2012 and April 10-12, 2012"
c = " Nov. 30 - Dec. 3, 2009"
d = "October 29-November 2, 2012"

format1_regex = re.compile(r"""\s*((?:January|Jan|February|Feb|March|Mar|April|Apr|May|June|Jun|Ju(?:l|1)y|Ju(?:l|1)|August|Aug|September|Sept|October|Oct|November|Nov|December|Dec).?\S*)\s*\d{1,2},\s*\d{4}""",re.I)


date_values = [a,b,c,d]
result = ""
for date_val in date_values:
    splitted = date_val.split("-")
    if len(splitted) > 1:
        check_format = format1_regex.search(splitted[-1])
        if check_format:
            #print check_format.group()
            result = check_format.group()
        else:
            #print re.sub(r'\d{1,2}[\s\S]-','',date_val)
            result = re.sub(r'\d{1,2}[\s\S]-','',date_val)
    if "and" in result:
         result = result.split("and")[-1]
    elif "&" in result:
        result = result.split("&")[-1]

    print result 

// output
January 17, 2014
 April 12, 2012
 Dec. 3, 2009
November 2, 2012