RegEx返回不精确的浮点数

时间:2015-10-06 20:36:21

标签: c# regex

我有这个文本文件

1   3          10.1144881901           48.8578515599          340.2980957031           -3.9997586182           -2.0398821492          -56.6352938643
2   1          10.1137751593           48.8575005060          401.4981384277          -11.7762306910            3.4075851669          -92.5498187137

我有这个C#代码来读取数字,我需要第5列并更改该值,然后将所有列保存到新的文本文件。

String pattern = @"(\d+)\t(\d+)\t\s+[-+]?(\d*[.])?\d+\t\s+[-+]?(\d*[.])?\d+\t\s+[-+]?(\d*[.])?\d+";
foreach (Match m in Regex.Matches(line, pattern))
{                        
   string value = m.Groups[5].Value;
}

值字符串仅包含340.而不是340.2980957031 很奇怪m.Groups [0]包含所有数字,包括精度。

2 个答案:

答案 0 :(得分:1)

那个正则表达式怎么样:

^([+-]?\d+(\.\d+)?\s+){4}(?<number>[+-]?\d+(\.\d+)?)

DEMO

您可以通过

访问所有号码
match.Groups["number"].Value

十进制数的模式是:[+-]?\d+(\.\d+)?由于正则表达式的贪婪,它将捕获所有数字。

答案 1 :(得分:0)

我找到了解决方案,这个表达式包括浮点精度

(\d+)\t(\d+)\t\s+[-+]?([0-9]*\.[0-9]+|[0-9]+)\t\s+[-+]?([0-9]*\.[0-9]+|[0-9]+)\t\s+[-+]?([0-9]*\.[0-9]+|[0-9]+)