Регулярное выражение, чтобы вывести строку из скобок? - PullRequest
3 голосов
/ 03 апреля 2012

У меня есть следующая строка:

"Девушка с татуировкой дракона (LISBETH)"

и мне нужно получить только строку вскобки в конце ввода.

Пока я пришел к этому:

    public static void main(String[] args) {

    Pattern pattern =
    Pattern.compile("\\({1}([a-zA-Z0-9]*)\\){1}");

    Matcher matcher = pattern.matcher("The girl with the dragon tattoo (LISBETH)");

    boolean found = false;
    while (matcher.find()) {
        System.out.println("I found the text " + matcher.group()
                + " starting at " + "index " + matcher.start()
                + " and ending at index " +
                matcher.end());
        found = true;
    }
    if (!found) {
        System.out.println("No match found");
    }
}

Но в результате я получаю: (LISBETH).

Как избавиться от этих скобок?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 03 апреля 2012

Используйте этот шаблон: \\((.+?)\\), а затем получите группу 1

public static void main(String[] args) {

    Pattern pattern = Pattern.compile("\\((.+?)\\)");
    Matcher matcher = pattern.matcher("The girl with the dragon tattoo (LISBETH)");

    boolean found = false;
    while (matcher.find()) {
        System.out.println("I found the text " + matcher.group(1)
                + " starting at " + "index " + matcher.start()
                + " and ending at index " +
                matcher.end());
        found = true;
    }
    if (!found) {
        System.out.println("No match found");
    }
}
3 голосов
/ 03 апреля 2012

Используйте оглянуться назад и заглянуть в будущее, тогда вам не нужно использовать / получать доступ к группам

Pattern.compile("(?<=\\()[a-zA-Z0-9]*(?=\\))");

Те, кто смотрят сзади / впереди, не совпадают, они просто "проверяют", поэтому эти скобки не будут частью матча.

3 голосов
/ 03 апреля 2012

Вы действительно близки, просто поменяйте group(), start() и end() на group(1), start(1) и end(1), так как они уже есть в "соответствующей группе".

В кавычках из API:

public String group ()

Возвращает входную подпоследовательность, совпадающую с предыдущим соответствием.

И:

public String group (int group)

Возвращает входную подпоследовательность, захваченную данной группой во время предыдущей операции сопоставления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...