在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!