Извлечение строки из круглых скобок в Java с помощью регулярного выражения

Я пытаюсь извлечь строку из круглых скобок.
Допустим, у меня есть John Doe (123456789), и я хочу вывести только строку 123456789.

Я нашел эту ссылку и это регулярное выражение:

/\(([^)]+)\)/g

Однако я не смог понять, как получить желаемый результат.

Любая помощь будет оценена по достоинству. Спасибо!


person Nir Tzezana    schedule 17.07.2015    source источник
comment
Каков ваш вход и выход? В указанном сообщении показано, как получить значение группы 1.   -  person Wiktor Stribiżew    schedule 17.07.2015
comment
Вход — это строка, и вывод — тоже строка.   -  person Nir Tzezana    schedule 17.07.2015


Ответы (4)


String str="John Doe (123456789)";
System.out.println(str.substring(str.indexOf("(")+1,str.indexOf(")")));

Здесь я выполняю строковые операции. Я не очень хорошо знаком с регулярными выражениями.

person SatyaTNV    schedule 17.07.2015

Вам нужно избежать скобок в вашем регулярном выражении:

    String in = "John Doe (123456789)";

    Pattern p = Pattern.compile("\\((\\d*)\\)");
    Matcher m = p.matcher(in);

    while (m.find()) {
        System.out.println(m.group(1));
    }
person Sergey Grinev    schedule 17.07.2015

это работает для меня:

@Test
public void myTest() {
    String test = "test (mytest)";
    Pattern p = Pattern.compile("\\((.*?)\\)");
    Matcher m = p.matcher(test);

    while(m.find()) {
        assertEquals("mytest", m.group(1));
    }
}
person francesco foresti    schedule 17.07.2015

В Java вам нужно использовать

String pattern = "\\(([^()]+)\\)";

Затем нужное значение находится в .group(1).

String str = "John Doe (123456789)";
String rx = "\\(([^()]+)\\)";
Pattern ptrn = Pattern.compile(rx);
Matcher m = ptrn.matcher(str);
while (m.find()) {
  System.out.println(m.group(1));
}

См. демонстрацию IDEONE.

person Wiktor Stribiżew    schedule 17.07.2015