如何应用这个正则表达式?

4
抱歉问这个问题,但我已经花了6个小时尝试应用一个正则表达式。在解析一个社交网络时,我面临一个问题:一些昵称可能包含双引号(例如 John "Superstar" Smith),当尝试将这些字符串转换为json时,我的应用程序会失败。以下是我从在线验证器中看到的错误:
enter image description here
因此,如何将前一个单词为"nickname":的2个双引号替换为1个双引号?我尝试了分组(?="nickname":)并查找2个双引号(\"\"),但没有成功。

2
这是一个XY问题。你是不是说一个你无法控制的API返回了无效的JSON(未转义的字符串),以至于你无法将其转换为对象?还是你实际上正在尝试使用正则表达式来操作JSON,而不是仅仅解析它? - Evan Davis
@Mathletics,抱歉,英语不是我的母语,所以我可能会误解您的意思。该API返回给我2个双引号,因为该人的昵称中有它。为了进一步进行,我需要将该代码转换为json格式,但如果不将2个双引号替换为1个双引号,我无法完成此操作。当我尝试在Python中将其转换为json格式时,它会失败并显示“Expecting ',' delimiter”。 - Groosha
1个回答

2
您可以使用以下正则表达式。
"{2}([^,}]+?)"{2}

正则表达式可视化

Debuggex演示


哇!谢谢!我刚刚发现了一个新的解决方案,另一个来自另一个网站(只是为了保存在历史记录中):(?!nickname)""[^\w\s]*""""\W*""(?=,) - Groosha
""\W*""(?=,)不会匹配 - \W匹配非单词字符,而 (?=,)仅匹配尾随逗号,并且如果昵称是对象的最后一个属性,它将不会匹配,因为它将跟随}。虽然可以更改为 (?=[,}]) - phuzi
是的,你说得对。然而,这只适用于我的情况,因为Python无法识别西里尔字母(它将其视为\W)。再次感谢! - Groosha
(?!nickname)""[^\w\s]*"" - 不匹配任何非单词字符,如 '-,我不知道为什么在正则表达式开头有一个否定预查。 - phuzi
为什么要使用负向先行断言,因为我需要查找在单词“nickname”之后的字符串。 - Groosha
让我们在聊天中继续这个讨论 - phuzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接