簡體   English   中英

Java:使用正則表達式提取String中的各種值

[英]Java: Using Regular Expressions to Extract various number of values in a String

我想編寫一個函數,根據正則表達式模式從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]?

您的陣列當前存儲

[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開始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)會給你你想要的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM