所以基本上我正在阅读从基于文本的文件到数组的行。每行=新数组元素。这个基于文本的文件是自动生成的,因此文件到文件的结构是一致的。我想从数组元素中读取值。下面是我想要阅读的一行示例。
;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]);
如果您提供示例代码,请解释其背后的基本原理。
提前致谢!
答案 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
你必须逃避这段时间,因为它是正则表达式世界中的一个特殊字符(匹配任何字符)。