Группы захвата регулярных выражений, которые находятся в группе - PullRequest
4 голосов
/ 27 декабря 2010

В Java, как получить все группы, которые находятся внутри группы (регулярное выражение).
Например: использование (([A-Z] [a-z] +) +) ([0-9] +) для проверки строки: «AbcDefGhi12345».
Тогда получите результат:
матчи (): да
groupCount (): 3
группа (1): ABCDEFGHI
группа (2): 1009 * Ghi * группа (3): 12345

Но я хочу получить строки "Abc", "Def", "Ghi", "12345" соответственно.
Как я могу сделать это с помощью регулярного выражения?

Ответы [ 3 ]

1 голос
/ 27 декабря 2010
Pattern p = Pattern.compile("([A-Z][a-z]+|(?:[0-9]+))");
Matcher m = p.matcher("AbcDefGhi12345");
while(m.find()){
   System.out.println(m.group(1));
}
1 голос
/ 27 декабря 2010

Регулярные выражения не могут обрабатывать повторяющиеся группы, они могут возвращать любую из захваченных групп (в вашем случае это вернуло "Ghi").

В следующем примере будет напечатано:

Abc
Def
Ghi
12345

Код:

public static void main(String[] args) {

    String example = "AbcDefGhi12345";

    if (example.matches("(([A-Z][a-z]+)+)([0-9]+)")) {

        Scanner s = new Scanner(example);

        String m;
        while ((m = s.findWithinHorizon("[A-Z][a-z]+", 0)) != null)
            System.out.println(m);

        System.out.println(s.findWithinHorizon("[0-9]+", 0));
    }
}
0 голосов
/ 27 декабря 2010

как ответ hzh с некоторым форматом и немного проще:

Pattern p = Pattern.compile("[A-Z][a-z]+|[0-9]+"); 
Matcher m = p.matcher("AbcDefGhi12345"); 
while(m.find()){ 
    System.out.println(m.group(0)); 
}

дает вам

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