java正则表达式替换所有)但不是领导一个叛逆者

时间:2018-03-23 14:29:55

标签: java regex

我需要一个正则表达式,用一个括号替换所有括号,但如果撇号指向括号则不需要

实施例

a) ))) --> expected )
b) )))))) --> expected )
c) '))) --> expected ))

有人请帮忙吗? 我试过replaceAll("[^']\\)\\)+", ")"); 但不幸的是,这不起作用。

3 个答案:

答案 0 :(得分:3)

对于您的示例数据,您可以匹配')并在一个或多个)组中捕获。

然后换成一个)

'\)|(\)+)

根据@ctwheels的建议(感谢您!),这可以缩短为:

'\)|\)+

<强>解释

这将使用alternation来匹配')或多次匹配)

如果匹配,您可以将其替换为单个)

答案 1 :(得分:1)

使用一个正则表达式删除额外的括号:

replaceAll("(?<!')\\)+", ")")

另一个摆脱引号'

replaceAll("'\\)", ")")

把它们放在一起:

System.out.println("')'))))".replaceAll("(?<!')\\)+", ")").replaceAll("'\\)", ")"));

打印)))

在线试用here

答案 2 :(得分:0)

试试正则表达式:

(?<!(\'))\)+

replaceAll("(?<!(\\'))\\)+", ")");