1

我有一系列文本块,其中包含一个写为“2021年9月的第一个星期三”或“2022年7月的第三个星期一”等的日期。我不确定提取文本并将其重新格式化为标准的“年月日”格式的最佳方法。我尝试过使用启用了模糊匹配的datefinder库,但“第一个星期二”和其他一些函数都失败了,我相信这是因为它不是正常的日期格式。任何想法都将不胜感激,谢谢大家!

1
  • 您必须首先自己解析输入,以划分出日期、月份和年份,然后您可以使用例如datetime来创建日期对象以供进一步使用。如果所有输入日期都遵循您在这里描述的格式,那么解析它们应该非常简单。 评论 2023年8月1日19:04

1答案1

重置为默认值
1

假设文本中的所有日期都在年、月、周的基数日格式(您必须替换在里面具有属于第二天):

导入日历进口再进口文本=[“2021年9月的第一个星期三”,“2022年7月第三个星期一”,#更多日期]pattern=r“(w+),(\d{4})的(\w+)(\w+])”基数={“第一”:1,“秒”:2,“第三”:3,“第四”:4,“第五”:5}定义查找周的第n天(年、月、日、周):年=int(year_str)month=列表(calendar.month_name).index(month_name.capitalize())如果月份==0:return无n=基数.get(n_str.lower())如果n为无:return无cal=日历月日历(年、月)day_index=列表(calendar.day_name).index(day_of_week.capitalie())nth_occurrence=[week[day_index]代表一周,如果是week[day_ndex]!=0]如果n>len(第n次出现):return无天=第n次出现[n-1]date=f“{calendar.month_abbr[month]}{day},{year}”返回日期定义parse_text(文本):match=重新匹配(模式、文本)如果匹配:基数,day_of_week,month,year=match.groups()return find_nth_day_of_week(年、月、周、基数)return无日期=[parse_text(block)for block in text]对于i,枚举中的日期(日期):打印(f“日期{i+1}:{Date}”)
1
  • 虽然我没有检查代码中的任何细节,但这似乎是一种非常合理的方法。 评论 2023年8月4日18:51

你的答案

点击“发布您的答案”,即表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.