正则表达式在2个字符串之间匹配特定字符

时间:2019-06-18 14:37:31

标签: regex

我在附加器中有这个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"}

2 个答案:

答案 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

,它可能会起作用。

Demo