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

Python如何优雅清晰解析固定格式消息为指定结构化列表

固定格式消息解析方案

针对这类结构完全固定的程序生成日志,使用正则分组捕获比多次硬切split、依赖固定下标的实现更简洁鲁棒,逻辑分层清晰,也能自动适配参数数量变化的场景。

实现代码

import re

# 预编译匹配规则,分组顺序完全对应目标输出结构
MSG_PATTERN = re.compile(
    r"^(\S+) -> (\S+) : (\S+) \[([^\]]*)\] Loop : (\S+) Par : (\S+) Par_id : (\S+)$"
)

def parse_message(line: str) -> list:
    match = MSG_PATTERN.match(line.strip())
    if not match:
        raise ValueError("输入消息不符合约定格式")
    
    sender, receiver, msg_name, params_raw, loop_val, par_val, par_id_val = match.groups()
    
    # 单独解析方括号内的参数列表
    params = []
    if params_raw.strip():
        for item in params_raw.split(","):
            # 每个参数按冒号切分,最多切1次,兼容值里带冒号的场景
            key, val = [seg.strip() for seg in item.split(":", 1)]
            params.append([key, val])
    
    return [sender, receiver, msg_name, params, loop_val, par_val, par_id_val]

效果验证

用题目给出的样例测试:

test_line = 'c -> i : C_I_status [eStatus : 1, eSceEnd : 4] Loop : 0 Par : 0 Par_id : -1'
print(parse_message(test_line))

输出完全匹配预期结果:

['c', 'i', 'C_I_status', [['eStatus', '1'], ['eSceEnd', '4']], '0', '0', '-1']

同时支持空参数的场景:

test_empty = 'x -> y : EmptyMsg [] Loop : 2 Par : 5 Par_id : -10'
print(parse_message(test_empty))
# 输出:['x', 'y', 'EmptyMsg', [], '2', '5', '-10']

方案优势

  • 无硬编码下标取值,不会因为参数数量变化导致字段错位
  • 逻辑分层明确:先校验整体格式、拆分大字段块,再单独处理参数列表,可读性远高于多层split嵌套
  • 兼容性强:支持参数值包含冒号、参数前后存在多余空格的场景,也能正确识别负整数、0值的尾字段
  • 预编译正则的执行效率更高,适合批量处理大量消息的场景

内容的提问来源于stack exchange,提问作者Maxime Bouhadana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:39:53