如何使用模式匹配或任何内容从"("
和")"
中提取字符串。例如,如果文本是“
" Hello(Java)"
然后如何只获得"Java"
。
感谢。
答案 0 :(得分:49)
试试这个:
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(")"));
答案 1 :(得分:23)
List<String> matchList = new ArrayList<String>();
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);
}
<强>输出强>
Java
.NET
\\((.+?)\\)
是什么意思?
这个正则表达式模式将从\\(
开始,它将匹配(
,因为它在regExp中保留,因此我们需要转义此字符,同样适用于\\)
和(.*?)
将()
中的任何字符匹配任何字符,并将其视为我们正在查找的组。
答案 2 :(得分:4)
我知道这是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-
此函数还有另外两个版本,具体取决于开始和结束分隔符是否相同,以及分隔符是否多次出现在目标字符串中。