我在附加器中有这个json:
{"message": "This is a "bad-json" message" "severity": "INFO"}
我需要匹配消息中的每个双引号以将其替换为单引号,而将其他双引号保持不变,就像这样:
{"message": "This is a 'bad-json' message" "severity": "INFO"}
因此,我有一个正则表达式,其正向外观为正向外观:
(?<="message": ")(.*)(?=","severity")
但是我不知道如何只获取引号来进行替换,我尝试更改(.*)
部分,但似乎全部还是什么都没有,而且我无法仅捕获双引号。
下面是一个示例:RegexR
我一直在寻找其他答案,但其中大多数都希望我找到这个Regex match的所有字符,但仍然不够好。
编辑:
这里有更多示例:
{"message": "This is a "bad-json" message with "bad json" quotes","severity": "INFO"}
{"message": ""bad-json" message at start and end "bad json"","severity": "INFO"}
{"message": "many "bad-json" "bad-json" "bad-json", "bad-json" "bad-json" messages all over the place","severity": "INFO"}
答案 0 :(得分:1)
您可以使用
(\G(?!^)|"message": ")([^"]*)"(?=.*?","severity")
并替换为$1$2'
。
详细信息
(\G(?!^)|"message": ")
-第1组:上一场比赛或"message": "
子字符串的结尾([^"]*)
-第2组:双引号以外的0个或多个字符"
-双引号(?=.*?","severity")
-正向超前,需要在当前位置右侧的0个或多个字符后添加","severity"
子字符串。答案 1 :(得分:0)
在这里,我们可以设计一个类似于以下内容的简单表达式:
(.*"message"\s*:\s*".*?)"(.*?)"(.*?"\s*".*)
并进行以下替换:
$1'$2'$3
,它可能会起作用。