我正在尝试使用 Java Regex,以便仅删除不在顶点内的字符集中的字符。顶点之间的字符始终只有一个。 这是我输入的示例:
/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 内的值。
注意:如果可以转义'
,则需要将'[^']*'
替换为' [^'\\\\]*(?:\\\\.[^'\\\\]*)*'
.
关于Java正则表达式删除一组字符但不删除顶点之间的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42690783/