正则用于从非结构化文本中提取关键字段并清洗,再由python转换数值、组装字典,最后用json.dumps()生成标准json;不能仅靠正则或直接json.loads()。

直接用 json.loads() 解析字符串,前提是它已经是合法 JSON 格式。如果原始文本是自由格式(比如带括号、冒号、逗号混排的十六进制日志),就得先用正则提取结构、清洗内容、再组装成标准 JSON —— 这才是正则真正起作用的地方。
识别并提取关键字段
正则用来“定位”和“捕获”非结构化文本中的语义单元。比如解析这类行:
"(ABC 01) Part: 1 00, 0a, 00, 0c"可用模式 r"^\((\w+)\s+(\d+)\)\s+Part:\s+(\d+)\s+(.*)$" 一次性抓出四部分:模块名、编号、序号、数据段。注意开启 re.M(多行模式)让 ^ 和 $ 匹配每行首尾。
- 分组 1:
"ABC" - 分组 2:
"01"(需转为整数) - 分组 3:
"1"(section) - 分组 4:
"00, 0a, 00, 0c"(后续处理)
清洗并转换数据值
从上一步拿到的十六进制字符串(如 "00, 0a, 00, 0c"),需进一步拆分、去空格、转十进制:
- 用
split(",")切分得到["00", " 0a", " 00", " 0c"] - 对每个子串用
.strip()去空格 - 用
int(x, 16)转为整数,得到[0, 10, 0, 12]
这步不能靠正则一步到位,正则只负责“找出来”,数值转换得交给 Python 原生函数。
组装字典并序列化为 JSON
把清洗后的字段组织成 Python 字典,再用 json.dumps() 输出标准 JSON:
- 例如构造:
{"module": "ABC", "id": 1, "section": 1, "values": [0, 10, 0, 12]} - 调用
json.dumps(data, indent=2)得到缩进美观的 JSON 字符串 - 若要写入文件,直接用
json.dump(data, f)
整个过程不是“正则转 JSON”,而是“正则辅助结构化 → Python 组装 → json 模块序列化”。跳过正则硬套 json.loads() 会报错;只依赖正则不走 json 模块,结果又不是标准 JSON。











