从Regex Matcher中检索捕获组

时间:2012-12-06 17:28:47

标签: java regex

我如何解析以下字符串中的两个数字:

String fName = "Run_1_vs_2_pw_optimal_mapping.txt";

我试过这样,但它不起作用:

    Pattern filePatt = Pattern.compile("Run_(\\d+)_vs_(\\d+)_", Pattern.CASE_INSENSITIVE);

    Matcher scanner = this.filePatt.matcher(fName);
    while (scanner.find()) {
            int groupSize = scanner.groupCount();
            if (groupSize == 2) {
                firstRun = Integer.parseInt(scanner.group(0));
                secondRun = Integer.parseInt(scanner.group(1));
            }
            break;
     }

但是,这不起作用,因为scanner.gold(0)返回Run_1_vs_2。但为什么呢?

2 个答案:

答案 0 :(得分:2)

请参阅the documentation

  

捕获组从左到右编制索引,从1开始。组零表示整个模式,因此表达式m.group(0)等同于m.group()。

使用group(1)group(2)

答案 1 :(得分:2)

因为组号0对应于完全匹配。捕获从1开始计算。你想要的是捕获1(第一组括号)和2(第二组括号)。