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

Python中如何从字符串格式的对象列表中提取name键的值

问题原因分析

你两种方案失败的原因如下:

  • 正则匹配失败:你使用的正则r"'name': \D{1,}"中\D代表匹配非数字字符,且没有匹配到闭合的单引号,也没有设置分组单独提取name的取值,最终只能得到不完整的匹配结果。
  • json.loads解析失败:JSON标准规范要求键和字符串值必须用双引号包裹,你要解析的字符串里用的是单引号,不符合JSON格式要求,所以抛出解析错误。
可行解决方案

方法1:转换格式后解析(推荐,稳定性更高)

方案a:替换单引号后用json解析

如果确认字符串内容里没有额外的单引号,可以直接替换单引号为双引号后再解析:

import json

text = "[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"
# 把单引号替换为符合JSON规范的双引号
json_text = text.replace("'", '"')
data = json.loads(json_text)
# 提取所有name值
name_list = [item['name'] for item in data]
print(name_list) # 输出结果:['Thriller', 'Drama']

方案b:用ast.literal_eval解析(兼容性更强)

如果内容里可能存在单引号嵌套的情况,用Python自带的ast模块的literal_eval方法,它原生支持解析Python风格的单引号数组/字典字符串:

import ast

text = "[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"
data = ast.literal_eval(text)
name_list = [item['name'] for item in data]

方法2:修正正则表达式实现提取

调整正则规则,通过捕获组提取单引号包裹的name取值:

import re

text = "[{'id': 53, 'name': 'Thriller'}, {'id': 18, 'name': 'Drama'}]"
name_list = re.findall(r"'name': '([^']+)'", text)
print(name_list) # 输出结果:['Thriller', 'Drama']

正则说明:([^']+)是捕获组,匹配所有非单引号的字符,恰好可以拿到单引号包裹的name取值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:06