我需要一个正则表达式,用一个括号替换所有括号,但如果撇号指向括号则不需要
实施例
a) ))) --> expected )
b) )))))) --> expected )
c) '))) --> expected ))
有人请帮忙吗?
我试过replaceAll("[^']\\)\\)+", ")");
但不幸的是,这不起作用。
答案 0 :(得分:3)
对于您的示例数据,您可以匹配')
并在一个或多个)
组中捕获。
然后换成一个)
根据@ctwheels的建议(感谢您!),这可以缩短为:
<强>解释强>
这将使用alternation来匹配')
或多次匹配)
如果匹配,您可以将其替换为单个)
答案 1 :(得分:1)
使用一个正则表达式删除额外的括号:
replaceAll("(?<!')\\)+", ")")
另一个摆脱引号'
:
replaceAll("'\\)", ")")
把它们放在一起:
System.out.println("')'))))".replaceAll("(?<!')\\)+", ")").replaceAll("'\\)", ")"));
打印)))
。
在线试用here。
答案 2 :(得分:0)
试试正则表达式:
(?<!(\'))\)+
replaceAll("(?<!(\\'))\\)+", ")");