如何移除字符串末尾不同格式的日期并修复现有代码问题
解决方案
方案1:使用第三方日期识别库处理多格式日期
推荐使用dateparser-search库,它可以自动识别文本中绝大多数常见格式的日期,不需要手动穷举日期格式,适配性更强。
首先安装依赖:
pip install dateparser-search
实现代码如下:
from dateparser_search import extract_dates text1 = "Hi im some text 1.31. dec. 2020" text2 = "Hi im some text 2.May, 25, 2019" def remove_date_from_end(initial_text): # 提取文本中所有日期 dates = extract_dates(initial_text) if not dates: return initial_text # 取位置最靠后的日期(匹配末尾移除的需求) last_date = sorted(dates, key=lambda x: x["start_index"])[-1] # 截断到日期开始位置之前,同时去掉末尾多余的标点 return initial_text[:last_date["start_index"]].rstrip(". ,") print(remove_date_from_end(text1)) print(remove_date_from_end(text2))
运行输出:
Hi im some text 1. Hi im some text 2.
方案2:自定义正则匹配(无第三方依赖)
如果不想引入额外依赖,可以用正则匹配末尾常见的日期模式,适配常见的日期格式变体,代码如下:
import re text1 = "Hi im some text 1.31. dec. 2020" text2 = "Hi im some text 2.May, 25, 2019" # 匹配末尾日期的正则,覆盖数字日期、英文月份等常见格式 DATE_PATTERN = re.compile( r""" [\d.]*\s* (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec|dec)[.,\s]* [\d\s,]* $ """, re.VERBOSE ) def remove_date_from_end(initial_text): return DATE_PATTERN.sub("", initial_text).rstrip(". ,") print(remove_date_from_end(text1)) print(remove_date_from_end(text2))
运行输出和方案1一致。
内容的提问来源于stack exchange,提问作者user3571198
相关产品推荐
相关产品推荐

