我正在使用正则表达式从字符串值中删除引号。这些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})*[\"']
答案 0 :(得分:0)
出现此问题的原因是您匹配了这些反斜杠,并且将它们删除。要保留它们,请捕获这些反斜杠,并替换为$1
占位符:
s.replaceAll("((?<!\\\\)(?:\\\\{2})*)[\"']", "$1")
请参见regex demo。
((?<!\\\\)(?:\\\\{2})*)
现在被包裹在(...)
中,您可以通过在替换模式中使用$1
来引用该组中捕获的值。