当模式匹配多个组时,我在 Java 中的正则表达式会替换太多文本



使用如下字符串:

3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me)

目的是去掉括号中的任何内容,并将字符串变成:

3 SOME STRING 6 SOME OTHER STRING 8 THIRD STRING 

到目前为止,我最大的努力是:

private String removeAnythingInParentheses(String input) {
return Pattern.compile("\(.*\)").matcher(input).replaceAll("").trim();
}

然而,这替换了太多的字符串并留给我(我想它将第一个括号与字符串中的最后一个括号匹配(:

3 SOME STRING

我确信可以使用模式和匹配器的一些漂亮功能,但我无法弄清楚它们......

正如评论所建议的那样。正确答案是:

private String removeAnythingInParentheses(String input) {
return Pattern.compile("\([^()]*\)").matcher(input).replaceAll("").trim();
}

我想简单使用带有修改正则表达式的String.replaceAll会更容易看

input.replaceAll("\(.*?\)", "");

完整代码

String input = "3 SOME STRING (remove me) 6 SOME OTHER STRING (also remove me!) 8 THIRD STRING (and me)";
input = input.replaceAll("\(.*?\)", "");
System.out.println(input);

输出

3 一些字符串 6 一些其他字符串 8 第三根字符串

最新更新