簡體   English   中英

正則表達式在c#中讀取空格分隔值

[英]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.

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