如何使用Python从特定格式字符串中提取日期、星期及时间信息
问题原因
你使用的原正则\d{2}[/ ]\d{2}[/ ]\d{4}仅适用于匹配类似04/05/2024、04 05 2024的日期格式,和你需要解析的Tue 04 May, 09:56 PM结构完全不匹配,因此无法得到正确结果。
另外原代码直接调用open()未手动关闭文件,存在资源泄漏风险,推荐使用with上下文管理器自动处理文件关闭。
推荐实现方案(使用datetime模块解析)
该方案无需手动处理字段提取,可直接得到结构化的日期时间对象,方便后续任意格式的转换和计算:
import re from datetime import datetime # 读取文件内容 with open("scan_results2.txt", "r", encoding="utf-8") as f: content = f.read() # 匹配所有Last Update后的时间字符串 pattern = r"Last Update: ([A-Za-z]{3} \d{2} [A-Za-z]{3}, \d{2}:\d{2} [AP]M)" time_str_list = re.findall(pattern, content) parsed_result = [] for time_str in time_str_list: # 按指定格式解析为datetime对象 # 格式符说明:%a=星期英文缩写 %d=两位日期 %b=月份英文缩写 %I=12小时制小时 %M=分钟 %p=AM/PM标识 dt_obj = datetime.strptime(time_str, "%a %d %b, %I:%M %p") # 可按需补充年份,原格式无年份时strptime默认取1900年,示例补充为2024年 dt_obj = dt_obj.replace(year=2024) # 提取所需信息 parsed_info = { "完整日期": dt_obj.strftime("%Y-%m-%d"), "星期全称": dt_obj.strftime("%A"), "星期缩写": dt_obj.strftime("%a"), "24小时制时间": dt_obj.strftime("%H:%M"), "12小时制时间": dt_obj.strftime("%I:%M %p") } parsed_result.append(parsed_info) # 输出结果 for info in parsed_result: print(info)
极简正则提取方案
如果你只需要直接提取各字段、不需要结构化的日期对象,可直接使用分组正则:
import re with open("scan_results2.txt", "r", encoding="utf-8") as f: content = f.read() # 分组匹配各字段:(星期缩写) (日期) (月份缩写), (时间) (AM/PM) pattern = r"Last Update: ([A-Za-z]{3}) (\d{2}) ([A-Za-z]{3}), (\d{2}:\d{2}) ([AP]M)" match_list = re.findall(pattern, content) for week_abbr, day, month_abbr, time, period in match_list: print(f"星期:{week_abbr},日期:{day} {month_abbr},时间:{time} {period}")
内容的提问来源于stack exchange,提问作者ironmantis7x
相关产品推荐
相关产品推荐

