3

Java中实数的一个好的正则表达式是什么?

我创建了正则表达式([-]?[\\d]*\\.[\\d]*)并针对以下预期输出对其进行了测试:

in                  out        works?
--------------------------------------
qwerty34.34abcd     34.34       yes
qwe-34.34.34abcd    -34.34      no
+17.-9abc           17.0        yes
-.abc0              0.0         no

我必须得到确切的列(出)。请提供通过所有这些测试的正则表达式。

4

4 回答 4

5

尝试以下操作:

((\+|-)?([0-9]+)(\.[0-9]+)?)|((\+|-)?\.?[0-9]+)

这将匹配实数,包括整数,带或不带符号(以及带或不带小数点前的数字)。

于 2013-04-20T10:24:29.330 回答
3

正则表达式必须满足以下要求:

  1. 可能有一个可选的标志。尝试[+-]?
  2. 可能有 0 个或多个可选数字。尝试[0-9]*
  3. 可能有小数点。尝试[.]避免反斜杠炎。
  4. 小数点后可能有 0 位或更多位。试试[0-9]*
  5. #2 和#4 中至少有一个具有数字。这将使用[0-9]+,并且可以使用交替。

这种模式是否有效:[+-]?([0-9]*[.]?[0-9]+|[0-9]+[.]?[0-9]*)?然而,我担心灾难性的回溯。

于 2013-04-20T11:16:16.223 回答
2

下一个怎么样:

^-?(([1-9][0-9]*)|(0))(?:\.[0-9]+)?$

或下一个,如果你想允许“+”号:

^(-|\+)?(([1-9][0-9]*)|(0))(?:\.[0-9]+)?$

顺便说一句,这是一个用于测试和共享正则表达式的好网站。

于 2013-04-20T11:09:46.723 回答
2
^[+-]?(?:\d+\.?\d*|\d*\.\d+)$
  • ? 用于制作+-可选
  • ?: 用于非捕获组
  • \ 是一个转义字符
于 2013-04-20T11:02:38.767 回答