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

2024-04-24 05:51:42 发布

您现在位置: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

Tags: and数据字符串网站页面novmardec
3条回答

我设法找到了这个问题的答案。你知道吗

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

对于这些示例值,可以使用以下regexp:

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

但它是基于这样一个事实:字符串以年(第3组)结尾,前面是最大日(第2组),前面是最大月(第1组)。你知道吗

这种假设可能不适用于其他格式或其他顺序的日期。你知道吗

我建议您看看dateutil——它有一个通用的日期值解析器,它将返回datetime对象。从那里你可以简单地输出/比较它们。你知道吗

相关问题 更多 >