You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:45:48