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

使用正则匹配连续双引号前的单个双引号以修复异常JSON字符串

解决方案

问题本质

你遇到的是非标准JSON生成错误:字符串值内部的双引号未做转义处理,部分位置还会出现连续双引号"",导致JSON解析失败。

可直接运行的Python实现

方案1:保留值内部双引号(推荐,不丢失原始数据)

利用零宽断言匹配所有非JSON结构的内部双引号,转为转义格式:

import re
import json

bad_json = '{"Field":"String data "Other String Data""}'
# 正则匹配:既不是JSON结构起始/结束标识的双引号,就是值内部的多余引号
fixed_json = re.sub(r'(?<![{,:])"(?![,:}])', r'\\"', bad_json)

# 验证解析结果
data = json.loads(fixed_json)
print(data)
# 输出:{'Field': 'String data "Other String Data"'}

方案2:直接删除值内部多余双引号

如果不需要保留内部双引号,直接替换为空即可:

import re
import json

bad_json = '{"Field":"String data "Other String Data""}'
fixed_json = re.sub(r'(?<![{,:])"(?![,:}])', '', bad_json)
data = json.loads(fixed_json)
print(data)
# 输出:{'Field': 'String data Other String Data'}

正则规则说明

(?<![{,:])"(?![,:}]) 的逻辑:

  • (?<![{,:]):零宽负向后发断言,要求双引号的前一个字符不能是{、,、:(排除键起始、值起始的合法引号)
  • ":匹配目标双引号
  • (?![,:}]):零宽负向正向断言,要求双引号的后一个字符不能是,、:、}(排除键结束、值结束的合法引号)

原有正则失效原因

你之前写的(?=(?=(")).*"")仅做了正向预查判断存在连续双引号,没有排除JSON结构本身的合法引号,会匹配到大量无效位置,无法精准定位需要处理的目标引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:18:03