【发布时间】:2018-04-22 14:50:14
【问题描述】:
我尝试了几十个代码并使用了一些来自 regexlib 的代码,但以下代码会截断数据而不是选择正确的代码
string pattern = @"(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2})";
string input = "The numbers are 340.1 1,989.50 2,8000,100.50 3.5000 15.001 15.1";
MatchCollection collection = Regex.Matches(input, pattern);
foreach (Match m in collection)
{
Console.WriteLine(m.Value);
}
结果是:
- 1,989.50 - 这没关系
- 000,100.50 - 这不行。它将第一个数字从 2,8000,100.50 中删除,并拿走了它
- 3.50 - 这不行。它从 3.5000 中减去最后 2 个数字并拿下它
- 15.00 - 这不行。它削减了最后一位,截断数据并取走了它
- 15.1 不在列表中。没关系
我只想匹配这种类型的数字:1.00 100.00 1,000.00 100,000.00。其余的都应该忽略。目前 x.000 也被截断 谢谢!
添加 通过添加空间,我设法停止使用 3.5000 和 15.001。但是还是不能处理2,8000,100.50
(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2} )
【问题讨论】:
-
\,\d{3}8000 有 4 位数字?! -
您可能希望将预期结果添加到不正确的结果中。
-
您能否编辑您的问题并告诉我们预期的结果应该是什么?
-
为什么不简单地尝试用
double.TryParse()解析数字? -
你好。我只想匹配这种类型的数字:1.00 100.00 1,000.00 100,000.00。其余的都应该忽略。目前 x.000 也被截断