[英]regex to read space delimited values in c#
代碼示例:
string flowValues = @"(?<day>\d{2})\s+(?<val1>(\d+\.?\d+)|\w+)\s+(?<val2>(\d+\.?\d+)|\w+)?\s+(?<val3>(\d+\.?\d+)|\w+)\s+(?<val4>(\d+\.?\d+)|\w+)?\s+(?<val5>(\d+\.?\d+)|\w+)\s+(?<val6>(\d+\.?\d+)|\w+)?\s+(?<val7>(\d+\.?\d+)|\w+)\s+(?<val8>(\d+\.?\d+)|\w+)\s+(?<val9>(\d+\.?\d+)|\w+)?\s+(?<val10>(\d+\.?\d+)|\w+)\s+(?<val11>(\d+\.?\d+)|\w+)?\s+(?<val12>(\d+\.?\d+)|\w+)";
regex = new Regex(flowValues, regexOptions);
inputData = "30 64.0 96.6 101 172 258 647 612 599 184 74.8 63.0";//fileContents[10 + i];
match = regex.Match(inputData);
dataMatrix[i, 0] = match.Groups["val1"].Value;
dataMatrix[i, 1] = match.Groups["val2"].Value;
dataMatrix[i, 2] = match.Groups["val3"].Value;
dataMatrix[i, 3] = match.Groups["val4"].Value;
dataMatrix[i, 4] = match.Groups["val5"].Value;
dataMatrix[i, 5] = match.Groups["val6"].Value;
dataMatrix[i, 6] = match.Groups["val7"].Value;
dataMatrix[i, 7] = match.Groups["val8"].Value;
dataMatrix[i, 8] = match.Groups["val9"].Value;
dataMatrix[i, 9] = match.Groups["val10"].Value;
dataMatrix[i, 10] = match.Groups["val11"].Value;
dataMatrix[i, 11] = match.Groups["val12"].Value;
這里, match.Groups["val2"].Value;
返回的值match.Groups["val2"].Value;
是96.6而我期望它返回空字符串而match.Groups["val11"].Value;
是空的,而我期望它返回74.8。
輸入數據是每個月相應日期的一些流量值。 所以: 請注意,這些值是針對2008年的。所以我們有一個2月29日的值。
你不只是使用字符串拆分方法? 它需要一個char數組分隔符。
你的正則表達式是不必要的復雜...為什么不使用更簡單的東西:
(?:([\w.]+)|(?:\s+))
(例如: http : //regex101.com/r/iN0qD0 )
或者更簡單
([\d.]+)
(例如: http : //regex101.com/r/wD7vH7 )
它將返回特定於您想要的任意組; 雖然它們不是命名捕獲組,但您可以根據它們在返回的匹配組中的位置來確定哪些是哪個。
我不確定我是否理解正確,但是如果你想弄清楚如何從這個表達式中檢索捕獲,請執行以下操作:
dataMatrix[i, 0] = match.Groups[0].Value;
dataMatrix[i, 1] = match.Groups[1].Value;
dataMatrix[i, 2] = match.Groups[2].Value;
dataMatrix[i, 3] = match.Groups[3].Value;
dataMatrix[i, 4] = match.Groups[4].Value;
dataMatrix[i, 5] = match.Groups[5].Value;
dataMatrix[i, 6] = match.Groups[6].Value;
dataMatrix[i, 7] = match.Groups[7].Value;
dataMatrix[i, 8] = match.Groups[8].Value;
dataMatrix[i, 9] = match.Groups[9].Value;
dataMatrix[i, 10] = match.Groups[10].Value;
dataMatrix[i, 11] = match.Groups[11].Value;
您可以通過實現類似(from 0 to 11, do)
等循環來進一步簡化。
這個正則表達式工作正常:
(?<day>\d{2})\s+(?<val1>(\d+\.?\d+)|\w+)\s+(?<val2>(\d+\.?\d+)|\w+|\s{4})\s+(?<val3>(\d+\.?\d+)|\w+)\s+(?<val4>(\d+\.?\d+)|\w+|\s{4})\s+(?<val5>(\d+\.?\d+)|\w+)\s+(?<val6>(\d+\.?\d+)|\w+|\s{4})\s+(?<val7>(\d+\.?\d+)|\w+)\s+(?<val8>(\d+\.?\d+)|\w+)\s+(?<val9>(\d+\.?\d+)|\w+|\s{4})\s+(?<val10>(\d+\.?\d+)|\w+)\s+(?<val11>(\d+\.?\d+)|\w+|\s{4})\s+(?<val12>(\d+\.?\d+)|\w+)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.