2

を検証できる正規表現が必要ですDecimal (18,3)。つまり、精度は 18、スケールは 3 です。

次の基準に合格する必要があります。

  • コンマの前の最大桁数は15
  • カンマの後の最大桁数は3

有効な例:

123456789.123
123456789123456.12
12345.1
123456789123456

無効な例:

1234567891234567
123.1234
1.12345
.1234

どうすればこれを達成できますか?

4

3 に答える 3

4

まず、文字.はドット、ピリオド、ピリオド、または小数点と呼ばれますが、コンマは文字です,

次に、文字クラスの正規表現で数字を指定できます: [0-9]0 から 9 までの任意の数字を意味します。

正規表現のドットは任意の文字に一致するため、バックスラッシュを使用してエスケープする (または文字クラスに入れる) 必要があります。

ただし、同じ文字クラスの要素は任意の順序にすることができるため、数字とドットを含むものを取得して使用する[0-9.]場合は、任意の数字またはドットに一致することを覚えておいてください。

ここで、タスクに有限量指定子が必要になります。これは、最小値と最大値の形式{m,n}で中括弧で指定されます。今使用すると...文字クラスが 1 ~ 15 回繰り返されることを意味します。mn[0-9.]{1,15}[0-9.]

しかし、 を使用する[0-9.]{1,15}と、......or 1234( 順序は関係ないと前に言ったことを思い出してください。

したがって、これらすべてを適用すると、次の正規表現が得られます。

[0-9]{1,15}\.[0-9]{1,3}

ここで、検証を行っているため、正規表現が (単に一致を見つけるのではなく) 文字列全体をテストする必要があることを指定するアンカーが必要になります。

^[0-9]{1,15}\.[0-9]{1,3}$

最後に、オプションの小数を使用できるため、グループと?0 または 1 を意味する量指定子を使用する必要があります。

^[0-9]{1,15}(?:\.[0-9]{1,3})?$

コードでは、次のような正規表現を作成します。

string myString = "123456789.123";
var regexp = new Regex(@"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
var setMatches = regexp.Matches(myString);
foreach (Match match in setMatches)
{
    Console.WriteLine(match.Groups[0].Value);
}

正規表現に合格した場合、これは小数を出力します。

またはこのようなもの:

string myString = "123456789.123";
Match match = Regex.Match(myString, @"^[0-9]{1,15}(?:\.[0-9]{1,3})?$");
if (match.Success)
{
    Console.WriteLine(match.Groups[0].Value);
}
于 2013-09-29T10:12:50.420 に答える
0

これを試して

  String str="Your input";
    Pattern pattern = Pattern.compile("^\\d{1,15}($|(\\.\\d{1,3}$))");
    Matcher matcher = pattern.matcher(str);
    while (matcher.find()) {
        System.output.Println(matcher.group());
    }

C#でこれを試してください

    MatchCollection mc = Regex.Matches("your text", "^\d{1,15}($|(\.\d{1,3}$))");
             foreach (Match m in mc)
             {
                Console.WriteLine(m);
            }
于 2013-09-29T09:54:43.740 に答える