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

use*_*217 16 java pattern-matching

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

"你好(Java)"

然后如何获得"Java".

谢谢.

Rah*_*thi 52

试试这个:

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

要么

String str = "Hello (Java)";
String answer = str.substring(str.indexOf("(")+1,str.indexOf(")"));
Run Code Online (Sandbox Code Playgroud)

  • @rupinderjeet你和两个给+1的人应该在写/支持这些评论之前检查答案的日期和时间. (2认同)

Cod*_*roc 27

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);
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

Java
.NET
Run Code Online (Sandbox Code Playgroud)

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

这个正则表达式模式将从它在regExp中保留的\\(匹配开始,(因此我们需要转义此字符,同样的事情\\)并且(.*?)将匹配任何字符零或更多时间(),而不是我们正在查找的组.

  • 如何在表达式 ["1","5","7"] 中获取字符串。结果应该是“1”、“5”和“7”。我们应该使用像:`Pattern regex = Pattern.compile("\\[(.*?)\\]");` (2认同)

Yur*_*ury 6

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

String result = StringUtils.substringBetween(str, "(", ")");
Run Code Online (Sandbox Code Playgroud)

在您的示例中,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-

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