-1

对于考虑千位和小数位的数字,我需要一个正则表达式。到目前为止,我提出的一个是:

\d{1,3}(\.\d{3})*(,\d*)?

它将捕获3.000,00以及3,003.000。甜的。

问题是我需要它非常贪婪,并首先捕获更大的数字,例如,对于这个输入:

125,45.124.890,45,32,67.456

我需要它45.124.890,45作为一个数字来捕获。这对我很重要,因为它是最大的。我的正则表达式不起作用,因为它会捕获123,45然后45不会被考虑用于下一场比赛。所以它捕获的下一个数字124.890,45对我不利。

有什么想法吗?

PS因为我是巴西人,所以分隔符是倒置的

4

1 回答 1

2

使用正则表达式模式

(?!0\d)\d{1,3}(?:\.\d{3})*(?:\,\d+(?![\d\.]))?

C# 演示:

using System;
using System.Text.RegularExpressions;

public class Test
{
  public static void Main()
  {
    const string line = @"125,45.124.890,45,32,67.456";
    MatchCollection matches = Regex.Matches(line, 
      @"(?!0\d)\d{1,3}(?:\.\d{3})*(?:\,\d+(?![\d\.]))?");
    foreach(Match match in matches)
    {
      foreach (Capture capture in match.Captures)
      {
        Console.WriteLine(capture.Value);
      }
    }
  }
}

输出:

125
45.124.890,45
32
67.456

在这里测试这个演示。

于 2012-10-18T23:00:13.743 回答