如何让RegEx.Split从字符串中提取包含小数点的一系列数字?

时间:2010-06-30 09:14:20

标签: c# regex split

这种从字符串中提取整数的例子很常见:

string input = "10 blah 20 30 nonsense 40 50";

string[] numbers = System.Text.RegularExpressions.Regex.Split(input, @"^[\d]");

但我如何计算带小数点的数字呢?

e.g。

string input = "10 blah 20 30 nonsense 40.5 50"

与上面的正则表达式一起使用,不出所料,小数点后面的40和5被分成数字数组的不同元素。

在我的天真中,我认为以下内容会起作用:

string[] numbers = System.Text.RegularExpressions.Regex.Split(input, @"^[\d\.]");

但是这会导致小数点被分割成它自己的数组元素。

这看起来应该很容易但我已经尝试了各种正则表达式而没有任何成功。我正在撕扯我的头发 - 非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

请记住,对于Regex.Split(input, @"[^\d.]+");,您将获得误报(对于 non.sense 50.6.8 > =>等字符串;您必须使用值“。”过滤掉结果。在他们中间。

您也可以使用匹配方法而不是拆分。

MatchCollection mc = Regex.Matches(input, @"\d+(?:\.\d+)?");<br />
string[] numbers = (from Match m in mc select m.Value).ToArray();

答案 1 :(得分:0)

System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");

拆分分隔符是1个或多个字符,既不是数字也不是句点。请注意,即使是第一个输入,您的常见示例也是错误的。它只会使用第一个数字作为分隔符,这意味着它不会出现在数组中。

编辑:我用两个输入测试了它,它起作用了:

string input = "10 blah 20 30 nonsense 40 50";
System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");
{ "10", "20", "30", "40", "50" }

input = "10 blah 20 30 nonsense 40.5 50";
System.Text.RegularExpressions.Regex.Split(input, @"[^\d.]+");
{ "10", "20", "30", "40.5", "50" }