Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中提取最大日期字符串_Python - Fatal编程技术网

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

在python中提取最大日期字符串,python,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, 20

我正在尝试对网站进行爬网并从页面获取数据。页面有一些字符串,如下所示。根据这些数据,我需要从字符串中找到最长日期,并将其存储到表中。我怎样才能做到这一点

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

我建议您看看-它有一个通用的日期值解析器,将返回
datetime
对象。从那里,您可以随意输出/比较它们。

对于这些示例值,您可以使用这样的regexp:

([\w\.]+) \d*-*(\d+), (\d{4})$
但它是基于这样一个事实:字符串以年(第3组)结尾,前面是最大日期(第2组),前面是最大月份(第1组)


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

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

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

为什么选择2012年4月12日的
“2012年3月19日至22日和2012年4月10日至12日”
@Kasra,因为这是字符串涉及的最新日期。(3月之后是4月,最高的是22日)。To OP:我不认为正则表达式是这里的正确工具。谢谢@Jerry,如果他认为可以用正则表达式来实现它的话???@Kasra除非OP可以定义一个明确的模式,否则你不能用正则表达式来实现它,至少不能单独使用正则表达式,因为正则表达式不理解日期是如何工作的。你可以用一堆lookaheads来解释规则,但这会很难看。@Jerry谢谢你的解释,正因为如此,我想知道在这里使用regex!