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

Python中从字符串提取JSON对象及items字段的正则匹配求助

从React渲染代码中提取items字段的JSON数据

你之前用的正则[items?:?]\s(".*")没法正确匹配到目标数据,因为items后面跟着的是嵌套的数组对象,不是单个字符串,而且正则的匹配逻辑也没覆盖到数组的完整结构。我给你两种靠谱的解决方案:

方法一:正则配合JSON解析

先通过正则定位到items对应的数组内容,再把JS对象格式转成JSON能识别的格式,最后解析成Python对象。

import re
import json

# 你的原始响应文本
response_text = '''ReactDOM.render(React.createElement(BoxedLinksListView, { initialState: { items: [{ link: "https://www.sehir.edu.tr/en/academics/college-of-humanities-and-social-sciences", sort: 1, parentTitle: "", title: "College of Humanities and Social Sciences" }, { link: "https://www.sehir.edu.tr/en/academics/graduate-school-of-business/mba-in-islamic-finance-and-economics", sort: 82, parentTitle: "Graduate School of Business", title: "MBA in Islamic Finance and Economics (Thesis)" }, { link: "https://www.sehir.edu.tr/en/academics/graduate-school-of-business/mba-in-islamic-finance-and-economics", sort: 83, parentTitle: "Graduate School of Business", title: "MBA in Islamic Finance and Economics (Non-thesis)" }] } }'''

# 匹配items: 后面的整个数组内容
match = re.search(r'items:\s*(\[.*?\])', response_text, re.DOTALL)

if match:
    # 提取到的数组字符串(JS格式)
    items_js_str = match.group(1)
    # 把JS里不带引号的键替换成JSON要求的带双引号的键
    items_json_str = re.sub(r'(\w+):', r'"\1":', items_js_str)
    # 解析成Python列表
    items_data = json.loads(items_json_str)
    print("提取到的items数据:")
    print(items_data)
else:
    print("未找到items字段")

方法二:用专业库解析JS对象

如果你的数据结构更复杂,正则容易出错,可以用demjson库直接解析JS对象字面量,不用手动处理引号问题。

首先安装依赖:

pip install demjson

然后编写代码:

import re
import demjson

response_text = '''ReactDOM.render(React.createElement(BoxedLinksListView, { initialState: { items: [{ link: "https://www.sehir.edu.tr/en/academics/college-of-humanities-and-social-sciences", sort: 1, parentTitle: "", title: "College of Humanities and Social Sciences" }, { link: "https://www.sehir.edu.tr/en/academics/graduate-school-of-business/mba-in-islamic-finance-and-economics", sort: 82, parentTitle: "Graduate School of Business", title: "MBA in Islamic Finance and Economics (Thesis)" }, { link: "https://www.sehir.edu.tr/en/academics/graduate-school-of-business/mba-in-islamic-finance-and-economics", sort: 83, parentTitle: "Graduate School of Business", title: "MBA in Islamic Finance and Economics (Non-thesis)" }] } }'''

# 先定位到initialState的对象部分
match = re.search(r'initialState:\s*({.*?})', response_text, re.DOTALL)
if match:
    state_js_str = match.group(1)
    # 直接解析JS对象为Python字典
    state_data = demjson.decode(state_js_str)
    # 获取items字段
    items_data = state_data['items']
    print("提取到的items数据:")
    print(items_data)
else:
    print("未找到initialState")

这两种方法都能帮你顺利提取到items里的所有数据,你可以根据自己的需求选择~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:03