4

我只想在“。”之前有 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

谁能帮忙?

4

7 回答 7

8

我认为您需要在带小数点的数字和不带小数点的数字之间进行替代:

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

编辑:

感谢 user1884032 指出缺少的括号:

^(\d{1,5}|\d{0,5}\.\d{1,2})$
于 2013-04-02T20:06:31.913 回答
1
 /^(\d{0,5}\.\d{1,2}|\d{1,5})$/
于 2013-04-02T20:06:43.913 回答
0

你需要这个:

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

我已经删除了?,这使点成为可选的。

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

于 2013-04-02T20:04:20.470 回答
0

迟到总比不到好:

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

两组:

  • 一个匹配从 0 到 5 位,
  • 另一个从 1 到 2 位小数,允许0.12.12.

简单而完美:)

于 2019-01-06T16:36:27.763 回答
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']

于 2019-04-03T06:07:00.517 回答
-1

有两个单独的问题:

  1. 如果要匹配“.”之前的 0 到 5 位数字。所以你需要第一部分来d{0,5}代替d{1,5}.

  2. 而不是有一个可选的“。” 后面跟着两个字符,你应该有“。” 如果它后面有字符,但如果它后面没有字符则没有点。使用以下内容,如果最后两位出现在“。”之后,您只会得到七位数。

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

意思是

0-5
  位数字,然后是小数点,然后是 0-2 位数字

  0-5 位数字,后跟可选的小数点

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

于 2013-04-02T20:04:43.317 回答
-1

试试这个:

/^\d{0,5}\.\d{0,2}$/
于 2013-04-02T20:19:26.717 回答