比赛号码不以0结尾

时间:2019-03-06 02:42:38

标签: regex

我使用以下模式匹配整数和分数:

  

(0 | [1-9] [0-9] *)(。[0-9] +)?

它与数字匹配,例如:

0
1
12
12.1
12.12

但它也匹配:

0.0
0.00
1.00
1.10

我的问题是如何修改上面的模式以禁止小数点后以零结尾的数字匹配。

3 个答案:

答案 0 :(得分:2)

您的模式(0|[1-9][0-9]*)(.[0-9]+)?与所有示例匹配,因为第二部分(.[0-9]+)?没有考虑到最后一个匹配应为1-9。请注意,您必须对点\.进行转义才能使其在字面上匹配。

您可以将模式的第二部分更新为匹配0次以上的[0-9]*,并确保匹配以[1-9]结尾:

^(0|[1-9][0-9]*)(\.[0-9]*[1-9])?$

Regex demo

模式匹配:

  • ^字符串的开头
  • (0|[1-9][0-9]*)捕获组,匹配0或1,然后匹配0+次0-9
  • (匹配的可选捕获组
    • \.[0-9]*[1-9]匹配.,然后匹配0+次0-9,然后是1-9
  • )?关闭群组
  • $字符串结尾

例如,如果您不引用捕获组进行进一步处理,则可以使它们不捕获(?:

答案 1 :(得分:0)

您可以使用以下正则表达式:

codeConfigurationType="<MyNameSpace>.<Derived DBConfiguration class>, <MyAssembly>"

演示:https://regex101.com/r/ZtRg49/5

以下所有元素均不匹配:

^(0|[1-9][0-9]*)(.(?:[0-9]+[1-9]|[1-9]))?$

如果要允许部分匹配(不考虑结尾0.0 0.00 1.00 1.10 ),则可以使用:

0

演示https://regex101.com/r/ZtRg49/4/

说明:

  • 我添加了一个约束,即在^(0|[1-9][0-9]*)(.(?:[0-9]+[1-9]|[1-9]))? 之后有一位数字.或几位数字可以包含[1-9],后跟一个非零数字0
  • 通过移除结尾的锚点[1-9],您可以启用部分匹配

答案 2 :(得分:0)

我对这个问题的建议:

^\d+$|[0-9.]*?[1-9]$

要满足的要求:

  • 匹配整数
  • 匹配不以0结尾的浮点数