首页 文章

Java正则表达式 - 删除引号,除非前面有奇数个反斜杠[重复]

提问于
浏览
1

这个问题在这里已有答案:

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

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

我想要如下结果:

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

以下正则表达式几乎适用于我,除了它在报价之前有一个偶数个时它也会剥去反斜杠,当我只想逃避双引号和单引号字符时 .

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

1 回答

  • 0

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

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

    regex demo .

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

相关问题