を検証できる正規表現が必要ですDecimal (18,3)
。つまり、精度は 18、スケールは 3 です。
次の基準に合格する必要があります。
- コンマの前の最大桁数は
15
- カンマの後の最大桁数は
3
有効な例:
123456789.123
123456789123456.12
12345.1
123456789123456
無効な例:
1234567891234567
123.1234
1.12345
.1234
どうすればこれを達成できますか?
を検証できる正規表現が必要ですDecimal (18,3)
。つまり、精度は 18、スケールは 3 です。
次の基準に合格する必要があります。
15
3
有効な例:
123456789.123
123456789123456.12
12345.1
123456789123456
無効な例:
1234567891234567
123.1234
1.12345
.1234
どうすればこれを達成できますか?
まず、文字.
はドット、ピリオド、ピリオド、または小数点と呼ばれますが、コンマは文字です,
。
次に、文字クラスの正規表現で数字を指定できます: [0-9]
0 から 9 までの任意の数字を意味します。
正規表現のドットは任意の文字に一致するため、バックスラッシュを使用してエスケープする (または文字クラスに入れる) 必要があります。
ただし、同じ文字クラスの要素は任意の順序にすることができるため、数字とドットを含むものを取得して使用する[0-9.]
場合は、任意の数字またはドットに一致することを覚えておいてください。
ここで、タスクに有限量指定子が必要になります。これは、最小値と最大値の形式{m,n}
で中括弧で指定されます。今使用すると...文字クラスが 1 ~ 15 回繰り返されることを意味します。m
n
[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);
}
これを試して
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);
}