正则表达式在c#中读取空格分隔值

时间:2013-12-23 04:48:21

标签: c# regex

代码示例:

                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;返回的值为96.6,而我预计它会返回空字符串,而match.Groups["val11"].Value;为空,而我预计它会返回74.8。

输入数据是每个月相应日期的一些流量值。所以: enter image description here 请注意,这些值是针对2008年的。所以我们有一个2月29日的值。

3 个答案:

答案 0 :(得分:1)

你不只是使用字符串拆分方法吗?它需要一个char数组分隔符。

答案 1 :(得分:1)

你的正则表达式是不必要的复杂...为什么不使用更简单的东西:

(?:([\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)等等

之类的循环来实现这一点

答案 2 :(得分:0)

这个正则表达式运行良好:

(?<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+)