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