我试图使用Java正则表达式,以便仅在字符不在尖峰中时才删除它们。顶点之间的字符始终只是一个。
这是我输入的示例:

/src(;/unit/expr_stmt[3]/expr/operator[4]=')'\n


这是我想要的输出:

/src/unit/expr_stmt[3]/expr/operator[4]=')'\n


我尝试使用负前瞻,但无法达到预期的效果。
这是我编写的正则表达式:

[\\s;\\(\\),]+(?!('[^']+'))


我需要使用Java Regex,因为我有几个不同的输入。
有谁能够帮助我?

最佳答案

您可以匹配并捕获以'开头的所有子字符串,然后包含除'以外的0+个字符,紧随其后的是'。然后,在所有其他上下文中匹配您需要删除的字符。作为替换模式,对捕获的值使用向后引用,以将其还原为最终结果:

s=s.replaceAll("('[^']*')|[\\s;(),]+","$1");


细节:


('[^']*')-捕获与'匹配的组1,除'以外的0+个字符,然后是'
|-或
[\\s;(),]+-1+个空格,;(),


替换模式中的$1是指捕获组1中存储的值。

注意:如果可以转义',则需要用'[^']*'替换'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'

09-25 17:28
查看更多