Шаблон для извлечения текста между скобками

Как извлечь строку из "(" и ")" с помощью сопоставления шаблонов или чего-то еще. Например, если текст `

"Привет (Java)"

Тогда как получить только "Java".

Спасибо.

Ответ 1

Попробуйте следующее:

 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(")"));

Ответ 2

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);
}

OUTPUT

Java
.NET

Что означает \\((.+?)\\)?

Этот регулярный шаблон выражения будет начинаться с \\(, который будет соответствовать (, поскольку он зарезервирован в regExp, поэтому нам нужно сбежать от этого символа, то же самое для \\) и (.*?) будет соответствовать любому символу, равному нулю или больше времени все, кроме того, в () рассматривается как группа, которую мы находим.

Ответ 3

Я знаю, что это было спрошено 3 года назад, но для тех, у кого есть тот же/похожий вопрос, который приземляется здесь (как и я), есть что-то еще более простое, чем использование регулярного выражения:

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

В вашем примере result будет возвращен как "Java". Я бы рекомендовал библиотеку StringUtils для различных видов (относительно простых) манипуляций с строками; он автоматически обрабатывает ненужные входы, что может быть удобно.

Документация для 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-

Существуют две другие версии этой функции, в зависимости от того, являются ли разделители открытия и закрытия одинаковыми и существует ли разграничитель в целевой строке несколько раз.