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

C# 从字符串的结构化数组中读取值,c#,arrays,string,search,filter,C#,Arrays,String,Search,Filter,所以基本上我是从一个基于文本的文件中以行形式读取到一个数组中。每行=新的数组元素。此基于文本的文件是自动生成的,因此文件之间的结构是一致的。我想从数组元素中读取值。下面是我想读的一行的例子 ;Basic settings: Layer height: 0.2 Walls: 0.8 Fill: 20 因此,我想从(例如)数组元素4(gline[4])中提取层高度值、墙值和填充值 最好的方法是什么?我正在用C#进行VS2012编程。这些数字都是正数,但除此之外,还可以是任意大小的数字 这是我尝试过

所以基本上我是从一个基于文本的文件中以行形式读取到一个数组中。每行=新的数组元素。此基于文本的文件是自动生成的,因此文件之间的结构是一致的。我想从数组元素中读取值。下面是我想读的一行的例子

;Basic settings: Layer height: 0.2 Walls: 0.8 Fill: 20
因此,我想从(例如)数组元素4(gline[4])中提取层高度值、墙值和填充值

最好的方法是什么?我正在用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]);
如果您提供了示例代码,请您解释一下它背后的基本原理


提前谢谢

我认为您需要的正则表达式是
@“\d+(\.\d?)”
。你不想在这件事上分裂,你想要的是比赛

所以你想要的是:

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

你必须逃出句点,因为它是正则表达式世界中的一个特殊字符(匹配任何字符)。

你尝试过什么?如果您还没有尝试过任何方法,您认为什么是最好的方法?我使用了for循环加上contains()方法来查找我要使用的数组中的行。我已经尝试让Regex.Match()工作,但没有效果。这是最好的方法吗?你能控制输入吗?在.NET端,有一些方法可以使它的结构更易于解析。该文件是由一个软件包创建的,该软件包将gcode输出到该文件中。其结构和功能必须是普遍兼容的。我最近尝试使用regex.split()函数,但在识别0.2为数字时遇到了问题。这看起来只是一个过滤器问题。非常感谢。我从来没有这样解释过。因此,对于0.25,我将使用@“\d+(\.\d\d?)?@user3684557:如果要匹配最多两位小数的数字,可以编写
@“\d+(\.\d{0,2}”)”
。也就是说,一个或多个数字可选地后跟一个句点和0、1或2个数字。所以“1.”是有效的,“1.1”和“1.12”也是有效的。
a string of digits
optionally followed by a period and 0 or 1 digits