正则表达式删除最后一个括号内的内容

时间:2013-05-15 15:31:30

标签: java regex

我输入的文字如下:

Text (Some Other Text) (More Text)

我要做的是完全删除最后一个括号以及其中的文本。 IE (More Text)
更一般地说,我希望表达式只匹配最后一个括号和内容。

我已经测试了以下正则表达式\s\(.*?\)$的相当多的变体,但我似乎无法让它工作,我可以告诉它。运算符匹配第一个括号直到最后一个结束括号,但无论我尝试过什么,我似乎无法想到如何处理它。

我正在使用正则表达式的Java实现。 (省略上面的额外转义字符)

4 个答案:

答案 0 :(得分:3)

public static void main(String[] args){ 
        String reg = "\\s\\([^)]+\\)$";
        String text = "Text (Some Other Text) (More Text)";
        System.out.println(text.replaceAll(reg, ""));
}

输出:

Text (Some Other Text)

编辑: 如果你在最后一个括号后面有一些额外的文字,@ anubhava提供了一个很好的解决方案

答案 1 :(得分:1)

以下应该适合你:

String regex = "\\s+\\([^)]+\\)([^()]*)$";
String text  = "Text (Some Other Text) (More Text) foo";
String repl  = text.replaceAll(regex, "$1");    
// Text (Some Other Text) foo

现场演示:http://ideone.com/WnUeIQ

或使用正向前瞻

String regex = "\\s+\\([^)]+\\)(?=[^()]*$)";
String text  = "Text (Some Other Text) (More Text) foo";
String repl  = text.replaceAll(regex, "");

现场演示:http://ideone.com/2HRBf0

答案 2 :(得分:0)

试试这个

    String s = "Text (Some Other Text) (More Text)";
    s = s.replaceAll(".*\\((.+)\\)$", "$1");
    System.out.println(s);

输出

More Text

答案 3 :(得分:0)

如果你的文字总是采用那种格式,你就不需要正则表达式了,效率很低。

这很好,并且比正则表达式更快:

String s = "Text (Some Other Text) (More Text)";
s = s.substring(0,s.lastIndexOf('('));
System.out.println(s);