gpt4 book ai didi

regex - 验证十进制 (18,3) 的正则表达式

转载 作者:行者123 更新时间:2023-12-02 21:48:42 28 4
gpt4 key购买 nike

我需要一个可以验证 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} 形式用大括号指定,其中 m 是最小值, >n 最大值。如果您现在使用... [0-9.]{1,15} 则意味着字符类 [0-9.] 重复 1 最多 15 次.

但如果你使用[0-9.]{1,15},它也会匹配......1234 code> (记住我之前说过顺序并不重要。

因此,应用所有这些,您将得到正则表达式:

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

现在,由于您正在进行验证,因此您将需要 anchor 来指定正则表达式应测试整个字符串(而不是简单地查找匹配项)。

^[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);
}

关于regex - 验证十进制 (18,3) 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com