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

Python正则表达式按值拆分问题:匹配键值对返回空列表求助

解决方案

你的原始正则存在两个核心问题:一是仅覆盖了日志开头的普通键值对,未适配后面的JSON结构;二是开头的(?:\w+ :)匹配限制过死,容错性差。

以下提供两种实现方式,按需选择:

方式一:双正则组合(纯正则处理)

用两个正则分别提取日志里的普通键值对和JSON内的键值对,再合并结果:

import re

data = 'JUN 2023 02 20 INFO : data1 = data2 data3 = data4 {"app":[{"key":"app1","value":"100"},{"key":"app2","value":"200"},{"key":"app3","value":"300"}]}'

# 提取日志中的data1、data3键值对
normal_pairs = re.findall(r'(\w+)\s*=\s*(\w+)(?=\s+\w+\s*=|\s*{)', data)
# 提取JSON中的app1~app3键值对
json_pairs = re.findall(r'"key":"(\w+)","value":"(\w+)"', data)

# 合并并按预期格式输出
all_pairs = normal_pairs + json_pairs
print("[")
for key, val in all_pairs:
    print(f"  '{key}' = '{val}',")
print("]")

运行输出:

[
  'data1' = 'data2',
  'data3' = 'data4',
  'app1' = '100',
  'app2' = '200',
  'app3' = '300',
]

方式二:正则+JSON解析(更稳定)

JSON结构用正则处理容易出问题,推荐用json模块解析JSON部分,更可靠:

import re
import json

data = 'JUN 2023 02 20 INFO : data1 = data2 data3 = data4 {"app":[{"key":"app1","value":"100"},{"key":"app2","value":"200"},{"key":"app3","value":"300"}]}'

# 提取普通键值对
normal_pairs = re.findall(r'(\w+)\s*=\s*(\w+)(?=\s+\w+\s*=|\s*{)', data)

# 提取并解析JSON字符串
json_str = re.search(r'{.*}', data).group()
json_data = json.loads(json_str)
json_pairs = [(item['key'], item['value']) for item in json_data['app']]

# 合并输出
all_pairs = normal_pairs + json_pairs
print("[")
for key, val in all_pairs:
    print(f"  '{key}' = '{val}',")
print("]")

内容的提问来源于stack exchange,提问作者Learn Hadoop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:45:29