从结构化的字符串数组中读取值

时间:2014-11-16 16:19:38

标签: c# arrays string search filter

所以基本上我正在阅读从基于文本的文件到数组的行。每行=新数组元素。这个基于文本的文件是自动生成的,因此文件到文件的结构是一致的。我想从数组元素中读取值。下面是我想要阅读的一行示例。

;Basic settings: Layer height: 0.2 Walls: 0.8 Fill: 20

所以我想从(例如)数组元素4(gline [4])中提取Layer高度值,Walls值和填充值。

最好的方法是什么?我在C#中使用VS2012编程。这些数字都是正数,但除此之外可以是任何大小。

这是我尝试过的代码,但是我无法将“0.2”或“0.8”作为数字接收。

Variables.gcodeLines = System.IO.File.ReadAllLines(Variables.FilePath);

var numbers = Regex.Split(Variables.gcodeLines[3], @"^\d+(.\d+){0,1}$").Where(s => s != String.Empty).ToArray();
MessageBox.Show("" + numbers[0] + " " + numbers[1]);

如果您提供示例代码,请解释其背后的基本原理。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我认为你想要的正则表达式是@"\d+(\.\d?)?"。你不想分开,你想要匹配。

所以你想要的是:

var re = new Regex(@"\d+(\.\d?)?");
var matches = re.Matches(Variables.gcodeLines[3]);
var numbers = matches.Cast<Match>().ToArray();

首先,您需要Matches而不是Split,因为Split会为您提供由数字分隔的内容。这就是你使用Split拆分逗号分隔列表的原因:除了逗号外,它还能为你提供所有内容。

另一方面,

Matches会为您提供包含数字的MatchCollection

正则表达式@"\d+(\.\d?)?"说:

a string of digits
optionally followed by a period and 0 or 1 digits

你必须逃避这段时间,因为它是正则表达式世界中的一个特殊字符(匹配任何字符)。