我试图使用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中存储的值。注意:如果可以转义
'
,则需要用'[^']*'
替换'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'
。