我输入的文字如下:
Text (Some Other Text) (More Text)
我要做的是完全删除最后一个括号以及其中的文本。 IE (More Text)
更一般地说,我希望表达式只匹配最后一个括号和内容。
我已经测试了以下正则表达式\s\(.*?\)$
的相当多的变体,但我似乎无法让它工作,我可以告诉它。运算符匹配第一个括号直到最后一个结束括号,但无论我尝试过什么,我似乎无法想到如何处理它。
我正在使用正则表达式的Java实现。 (省略上面的额外转义字符)
答案 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
或使用正向前瞻
String regex = "\\s+\\([^)]+\\)(?=[^()]*$)";
String text = "Text (Some Other Text) (More Text) foo";
String repl = text.replaceAll(regex, "");
答案 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);