用于在括号之间提取文本的模式

如何使用模式匹配或任何东西从"("")"提取字符串。 例如,如果文本是`

“你好(Java)”

那么如何只获得"Java"

谢谢。

尝试这个:

  String x= "Hello (Java)"; Matcher m = Pattern.compile("\\((.*?)\\)").matcher(x); while(m.find()) { System.out.println(m.group(1)); } 

要么

 String str = "Hello (Java)"; String answer = str.substring(str.indexOf("(")+1,str.indexOf(")")); 
 List matchList = new ArrayList(); Pattern regex = Pattern.compile("\\((.*?)\\)"); Matcher regexMatcher = regex.matcher("Hello This is (Java) Not (.NET)"); while (regexMatcher.find()) {//Finds Matching Pattern in String matchList.add(regexMatcher.group(1));//Fetching Group from String } for(String str:matchList) { System.out.println(str); } 

OUTPUT

 Java .NET 

\\((.+?)\\)是什么意思?

这个正则表达式模式将从\\(开始\\(它将匹配(因为它在regExp中保留,所以我们需要转义此字符,同样的事情为\\)(.*?)将匹配任何字符零或更多时间()被视为我们正在寻找的集团。

我知道这是3年前被问到的,但对于那些有相同/类似问题的人(就像我一样),有一些东西比使用正则表达式更简单:

 String result = StringUtils.substringBetween(str, "(", ")"); 

在您的示例中, result将作为“Java”返回。 我建议StringUtils库用于各种(相对简单的)字符串操作; 它会自动处理null输入之类的东西,这很方便。

substringBetween()的文档: https : //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#substringBetween-java.lang.String-java.lang.String- java.lang.String-

此函数还有另外两个版本,具体取决于开始和结束分隔符是否相同,以及分隔符是否多次出现在目标字符串中。