如何用Python提取含不规则分隔符单行文本中的多个目标字段值
Python提取不规则分隔单行文本的目标值方案
实现逻辑
针对存在多空格、逗号等不规则分隔符的单行日志文本,直接用正则定向匹配目标内容即可,无需提前做全量字符串分割:
- 对需要提取的数值字段,直接匹配
字段名=数值的固定格式,自动跳过无关分隔符和不需要的字段 - 对末尾的时间字段,单独匹配
at后的时间字符串,通过datetime模块解析后转换为YYYY-MM-DD HH:MM:SS的标准格式
完整代码
import re from datetime import datetime # 原始输入文本 raw_line = "Test done Tj=59 Tach=2506, P=108 V=0.7 G=1365.0 at Tue June 7 22:47:33" # 匹配目标键值对:仅提取Tj、Tach、P、G四个指定字段 kv_matcher = re.compile(r'(Tj|Tach|P|G)=([\d.]+)') kv_pairs = kv_matcher.findall(raw_line) # 提取并格式化时间 time_match = re.search(r'at\s+(.+)$', raw_line) raw_time = time_match.group(1).strip() # 原日志无年份信息,示例按需求补2022,实际场景可替换为当前年份或业务对应年份 parsed_time = datetime.strptime(f"2022 {raw_time}", "%Y %a %B %d %H:%M:%S") standard_time = parsed_time.strftime("%Y-%m-%d %H:%M:%S") # 拼接为要求的输出格式 output_segments = [] for key, val in kv_pairs: # 浮点数值转整数,对齐示例输出要求 output_segments.append(f"{key} = {int(float(val))}") output_segments.append(f"Time = {standard_time}") final_result = "\n ".join(output_segments) print(final_result)
运行结果
执行代码后输出内容和预期完全一致:
Tj = 59 Tach = 2506 P = 108 G = 1365 Time = 2022-06-07 22:47:33
适配说明
- 如果需要新增提取字段,直接在正则的键名分组里添加对应字段名即可,无关字段(比如示例中的
V=0.7)不会被匹配 - 如果原始日志自带年份信息,删除补全年份的代码段,调整
strptime的时间格式匹配规则即可 - 如果需要保留数值的小数部分,删除
int(float(val))的整数转换逻辑即可
内容的提问来源于stack exchange,提问作者buger
相关产品推荐
相关产品推荐

