正则表达式匹配最多2位小数的值

时间:2013-04-02 20:02:45

标签: regex

我想在“。”之前只有1到5位数字。和“。”后面的0到2位数字。 这是我到目前为止正则表达式。

^\d{1,5}\.?\d{0,2}$

1.00 -- match
11.01 -- match
111.10 -- match
1111.52 -- match
11111.23 -- match
.12 -- no match ... want to match
123456 -- match ... don't want to match because can take up to 5 integers before decimal
1234567 -- match ... don't want to match because can take up to 5 integers before decimal

任何人都可以帮忙吗?

7 个答案:

答案 0 :(得分:4)

我认为你需要在带小数点的数字和没有数字的数字之间进行替换:

^\d{1,5}|\d{0,5}\.\d{1,2}$

修改

感谢user1884032指出丢失的括号:

^(\d{1,5}|\d{0,5}\.\d{1,2})$

答案 1 :(得分:1)

 /^(\d{0,5}\.\d{1,2}|\d{1,5})$/

答案 2 :(得分:0)

你需要这个:

^\d{1,5}\.\d{0,2}$

我删除了?,这使点可选。

说你想匹配.12与你的规范相矛盾 - 在点之前没有1-5位数字。您的意思是{0-5}吗?

答案 3 :(得分:0)

迟到总比不到好:

^([\d]{0,5})(\.[\d]{1,2})?$

两组:

  • 一个从0到5位数字的匹配项,
  • 另外1个小数到2个小数,允许0.12.12

简单而完美:)

答案 4 :(得分:0)

我在python3中实现的最简单的方法是-

import re

p = re.compile(r'^\d{2}.\d{2}')
print(p.findall('12.59, 11.789, 10.6 lords a-leaping'))

输出-['12.59']

答案 5 :(得分:-1)

有两个不同的问题:

  1. 如果要在“。”之前匹配0到5位数。所以你需要第一部分说d{0,5}而不是d{1,5}

  2. 而不是选择“。”接下来是两个字符,你应该有“。”如果后面有字符,但如果后面没有字符则没有点。如果最后两个位于“。”之后,您将只得到7位数。

    ^\(d{0,5}\.\d{0,2})|(d{0,5}\.?)$

  3. 表示

    EITHER
    0-5位,然后是小数点,然后是0-2位数 OR
    0-5位,后跟可选的小数点

    此格式还会检测您未在测试中列出的该范围内的合法数字,例如12345.0.12

答案 6 :(得分:-1)

试试这个:

/^\d{0,5}\.\d{0,2}$/