Java:使用正则表达式提取String中的各种值

时间:2014-05-15 22:03:54

标签: java regex extract

我想编写一个函数,根据正则表达式模式从String中提取不同数量的值:

这是我的功能代码:

/**
 * Get substrings in a string using groups in regular expression.
 * 
 * @param str
 * @param regex
 * @return
 */
public static String[] regexMatch(String str, String regex) {
    String[] rtn = null;
    if (str != null && regex != null) {
        Pattern pat = Pattern.compile(regex);
        Matcher matcher = pat.matcher(str);
        if (matcher.find()) {
            int nGroup = matcher.groupCount();
            rtn = new String[nGroup];
            for (int i = 0; i < nGroup; i++) {
                rtn[i] = matcher.group(i);
            }
        }
    }
    return rtn;
}

当我使用以下方法测试时:

String str = "nets-(90000,5,4).dat";
String regex = "(\\d+),(\\d+),(\\d+)";
String[] rtn = regexMatch(str, regex);

我明白了:

rtn: [90000,5,4,90000,5]

如何按照我的预期让rtn达到[90000,5,4]?

2 个答案:

答案 0 :(得分:1)

您的阵列目前存储

[0] -> 90000,5,4
[1] -> 90000
[2] -> 5

这就是您看到输出[90000,5,4,90000,5]的原因。这是因为group(0)表示完整匹配,因此返回90000,5,4

您需要的是第1,2和3组的匹配。

(\\d+),(\\d+),(\\d+)
   1      2      3

所以改变

rtn[i] = matcher.group(i);

rtn[i] = matcher.group(i+1);

答案 1 :(得分:1)

首先,我会以1启动for循环,这样你就可以得到你在正则表达式中声明的分组。循环应如下所示:

for (int i = 1; i <= nGroup; i++) {
            rtn[i] = matcher.group(i);
        }

已知组0是正则表达式的完整匹配字符串。分组来自:

String regex = "(\\d+),(\\d+),(\\d+)";

你会说matcher.group(1),matcher.group(2)和matcher.group(3)会给你你想要的东西。