正则表达式截断而不是选择C#

时间:2018-04-22 14:50:14

标签: c# regex truncate cut

我尝试了几十个代码并使用了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中删除了最后两位数字并将其删除
  • 15.00 - 这不行。它削减了最后一位数字,截断数据并将其删除
  • 15.1不在列表中。这没关系

我想只匹配此类型的数字:1.00 100.00 1,000.00 100,000.00。其余的都应该被忽视。目前x.000也被采取并截断 谢谢!

ADDED 我设法通过添加空间停止使用3.5000和15.001。但仍无法处理 2,8000,100.50

(\d{1,3}(\,\d{3})*|(\d+))(\.\d{2} )

1 个答案:

答案 0 :(得分:0)

正则表达式:

(?<=^|\s)\d{1,3}(?:,\d{3})*(?:\.\d{2})(?=\s|$)

Updated Demo