【问题标题】:Regex matching numbers greater than a decimal value正则表达式匹配大于十进制值的数字
【发布时间】:2018-05-25 13:46:18
【问题描述】:

我要写的正则表达式必须匹配所有大于0.01的数值,并且小数点后最多两位数。

为了匹配所有小数点最多两位数的数字,有效的正则表达式是"^\\d+(?:\\.\\d{1,2})?$"

我在互联网上研究了大于某些值的正则表达式,但只发现了大于整数的正则表达式示例,但效果不一样。

有什么建议吗?

【问题讨论】:

  • XY 问题?你为什么需要这个?只需解析它并进行比较。对于Code Golf?

标签: regex numbers decimal


【解决方案1】:

我不确定这是否完全满足您的要求,我无法发表评论,但我认为您可以通过前瞻过滤零匹配项:(?!0+\.0+$)^\d+(?:\.\d{1,2})?$

【讨论】:

  • 我认为这非常接近我想要的,不同之处在于它检查大于 0.1 而不是 0.01 的值。它还说 0 没问题,这是不正确的
  • 我想我弄错了,请立即检查。
  • @user202729 你什么意思?我认为这很清楚。它应该匹配所有大于 0.01 且小数点后不超过 2 位的数值
【解决方案2】:

要匹配大于0.01 且小数点后最多两位数的数值,您可以在字符串开头使用负前瞻(?! 来断言带有可选点@ 的一个或多个零987654324@ zeroes 部分直到字符串结尾或字符串以0.01 开头才会出现。

^(?!0+(?:\.0+)?$|0+\.01$)\d+(?:\.\d{1,2})?$

这也将不匹配 00.00.0000000000000

详情

  • ^ 在行首断言位置
  • (?! 否定前瞻,它断言右边的不是
    • 0+(?:\.0+)?$ 将一个或多个零与一个可选部分匹配一个点和一个或多个零并断言行尾
    • |或者
    • 0+\.01$ 匹配一个或多个零,后跟 .01 并断言行尾
  • ) 关闭负前瞻
  • \d+ 匹配一位或多位数字
  • (?:\.\d{1,2})? 一个可选部分,将匹配一个点后跟一位或两位数字
  • $在行尾断言位置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多