-1

千と小数位を考慮した数値の正規表現が必要です。私がこれまでに思いついたものは次のとおりです。

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

3.000,00と と同様3,00にキャッチします3.000。甘い。

問題は、たとえば、次の入力の場合、非常に貪欲で、最初に大きな数をキャプチャする必要があることです。

125,45.124.890,45,32,67.456

数値としてキャプチャする必要があり45.124.890,45ます。一番大きいので大事にしています。私の正規表現は機能しません。キャプチャ123,4545てから、次の一致では考慮されないためです。したがって、次の数値は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 に答える