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

如何使用Python正则re.findall提取JSON中指定字段值存入列表

优先选择JSON解析方案(更稳定)

你提供的原始字符串是标准JSON结构,直接用Python内置的json模块解析取值远比重写正则靠谱,不会因为格式缩进、换行变化导致匹配失败,代码示例如下:

import json

# 你的原始JSON字符串
original_str = '''
{
"getYearsListOverview": {
    "sp_name": "analytics.year_overview_drop_down",
    "sp_input_params": {
        "req_url_query_params": [],
        "req_body_params": []
    },
    "sp_output_datasets": [],
    "page_name": "home"
},
"getRankingsDataPerformanceReport": {
    "sp_name": "analytics.get_performance_ranking_data",
    "sp_input_params": {
        "req_url_query_params": [
            ["@scroll_index", "index"]
        ],
        "req_body_params": [
            ["@event_type_id", "event_type_id"],
            ["@season", "season"],
            ["@athlete_guid", "athlete_guid"]
        ]
    },
    "sp_output_datasets": [],
    "number_of_output_datasets_for_customized_template": 4,
    "customised_response_template": {
        "performance_value_list": [],
        "rankings_table": [],
        "level_values": []
    },
    "page_name": "performancereport"
  }
}
'''
data = json.loads(original_str)

# 初始化结果列表
sp_name = []
req_url_query_params = []
req_body_params = []
page_name = []

for item in data.values():
    sp_name.append(item['sp_name'])
    page_name.append(item['page_name'])
    # 处理url参数
    url_params = item['sp_input_params']['req_url_query_params']
    if url_params:
        req_url_query_params.append(', '.join([f'{i[0]}, {i[1]}' for i in url_params]))
    else:
        req_url_query_params.append('')
    # 处理body参数
    body_params = item['sp_input_params']['req_body_params']
    if body_params:
        req_body_params.append(', '.join([f'{i[0]}, {i[1]}' for i in body_params]))
    else:
        req_body_params.append('')

# 输出和示例一致的结果
print(f"{sp_name = }")
print(f"{req_url_query_params = }")
print(f"{req_body_params = }")
print(f"{page_name = }")

正则实现方案(仅作为参考)

你的伪代码问题说明

你写的re.findall(r'sp_name(\w+)*',original_string)无法正确匹配,原因有二:

  1. 没有匹配sp_name后面的冒号、双引号、空格这些固定字符
  2. \w仅支持匹配字母、数字、下划线,无法匹配sp_name值里的.符号,也不能匹配参数里的引号、逗号等特殊字符

正确正则及代码示例

import re

# 匹配规则,开启re.DOTALL让.可以匹配换行符
sp_name_list = re.findall(r'"sp_name"\s*:\s*"([^"]+)"', original_str)
page_name_list = re.findall(r'"page_name"\s*:\s*"([^"]+)"', original_str)
url_params_list = re.findall(r'"req_url_query_params"\s*:\s*\[(.*?)\]', original_str, flags=re.DOTALL)
body_params_list = re.findall(r'"req_body_params"\s*:\s*\[(.*?)\]', original_str, flags=re.DOTALL)

# 对参数做格式化处理,去掉多余的引号、空格、换行
def format_params(param_str):
    if not param_str.strip():
        return ''
    # 提取所有双引号里的内容,再用逗号拼接
    items = re.findall(r'"([^"]+)"', param_str)
    return ', '.join(items)

req_url_query_params = [format_params(s) for s in url_params_list]
req_body_params = [format_params(s) for s in body_params_list]

# 输出结果
print(f"{sp_name = sp_name_list}")
print(f"{req_url_query_params = }")
print(f"{req_body_params = }")
print(f"{page_name = page_name_list}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:57:00