正则表达式 - 十进制数

时间:2017-01-25 16:00:53

标签: regex

我已经写了两个允许以下格式的Regexp:

  • X
  • X。
  • X.Y

其中Y可以是1或2位数。 X是无限的。

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

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

一个比另一个好吗?

有没有更好的方法来写这个?

此外,为什么这个只能将点设置为可选项:^\d+(?:\.)(?:\d{1,2})?$

感谢。

2 个答案:

答案 0 :(得分:3)

  

有没有更好的方法来写这个?

您可以在没有任何群组的情况下使用此正则表达式:

^\d+\.?\d{0,2}$

RegEx Demo

\d{0,2}允许在句点之后缺少任何数字。另请注意,\.{0,1}\.?

相同

答案 1 :(得分:2)

^\d+(?:\.)(?:\d{1,2})?$不起作用的原因是它制作了。如你所说的可选。 (?: ... )不是你如何制作可选的东西;它的主要用途是将多个事物组合在一起(以便后续的?,'+'等可以修改组)而不会产生捕获值。

使用?跟随它,使其成为可选项。所以:

^\d+\.?(?:\d{1,2})?$

应该有效。这比你展示的其他选项更简单 - 更可取。更简单:

^\d+\.?\d{0,2}$

应该没事。