Java正则表达式-删除引号,除非前面加上奇数个反斜杠

时间:2018-07-03 11:47:35

标签: java regex

我正在使用正则表达式从字符串值中删除引号。这些String值可以包含转义的引号,也可以包含转义的反斜杠字符。

我不想删除转义的引号,只删除非转义的引号。但是,转义的反斜杠字符在非转义的引号之前的情况会造成困难。

我想要以下结果:

"value"         ->  value
'value'         ->  value
"\"value\""     ->  \"value\"   <-- contains escaped quotes
"value\"        ->  value\"
"value\\"       ->  value\\     <-- contains escaped backslash before non-escaped quote
"""val"ue\\\""" ->  value\\\"

以下正则表达式几乎对我有用,除了当我只想转义双引号和单引号时,当引号前有偶数个反斜杠时,它还会去除反斜杠。 / p>

(?<!\\\\)(?:\\\\{2})*[\"']

1 个答案:

答案 0 :(得分:0)

出现此问题的原因是您匹配了这些反斜杠,并且将它们删除。要保留它们,请捕获这些反斜杠,并替换为$1占位符:

s.replaceAll("((?<!\\\\)(?:\\\\{2})*)[\"']", "$1")

请参见regex demo

((?<!\\\\)(?:\\\\{2})*)现在被包裹在(...)中,您可以通过在替换模式中使用$1来引用该组中捕获的值。