我正在尝试构建一个表达式来检查小数,如下所示:
valid number with 6 digits and/or precision of 1-4 digits
---------
656545
452568.1
574896.001
698547.2558
Not valid numbers:
---------
65456.23 - less than 6 main digits
6542166 - more than 6
652541.23165 - more than 4 digits of precision
到目前为止,我已经做到了这一点:
\b\d{6}\.?\d{0,4}?
但它也匹配超过6位数和/或超过4位精度的数字。 有什么帮助吗?
答案 0 :(得分:1)
resources.add(swaggerResource("login-service", "/api/login/the-login/api-docs", "2.0"));
这里的问题是小数点是可选的。这允许匹配一个10位数字(前六位数,然后是0到4位)......之后可能更多,因为\b\d{6}\.?\d{0,4}?
之后没有锚定。
相反:
\d{0,4}?
这样,如果数字中有小数,则小数点不是可选的。最后的\b\d{6}(\.\d{1,4})?(?!\.)\b
(负前瞻模式)确保数字后面没有点。
如果数字本身出现在某一行上(或单独出现在字符串或记录中,或者您拥有的任何内容):
(?!\.)
答案 1 :(得分:1)
如果我认为我理解你,从数字视角,就像这样:
无垫:(?<![\d.])[1-9]\d{5}(?:\.\d{0,3}[1-9])?(?![\d.])
演示:https://regex101.com/r/68gLUF/1
零填充:(?<![\d.])0*[1-9]\d{5}(?:\.\d{0,3}[1-9]0*)?(?![\d.])
可读版本:
(?<! [\d.] ) # Digit boundary
[1-9] \d{5} # Required, Valid 6 digit whole number 100,000 - 999,999
(?: # Optional, Valid decimal fraction .0001 - .9999
\.
\d{0,3}
[1-9]
)?
(?! [\d.] ) # Digit boundary