正则表达式捕获组中的组

时间:2010-12-27 07:22:44

标签: java regex

在Java中,如何获取组内的所有组(正则表达式) 例如:使用(([A-Z] [a-z] +)+)([0-9] +)测试一个字符串:“AbcDefGhi12345”。
然后得到结果:
比赛():是
groupCount():3
组(1):ABCDEFGHI
组(2):GHI
组(3):12345

但我想分别获得String“Abc”,“Def”,“Ghi”,“12345”。
我怎么能用正则表达式做到这一点?

3 个答案:

答案 0 :(得分:1)

正则表达式无法处理重复的组,它可以返回任何捕获的组(在您的情况下,它返回"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));
    }
}

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

像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