8

可以匹配具有任意小数位数的非零浮点数的最短正则表达式是什么?

它应该接受像

-1
-5.9652
-7.00002
-0.8
-0.0500
-0.58000
0.01
0.000005
0.9900
5
7.5
7.005

但拒绝诸如

.
.02
-.
-.996
0
-0
0.
-0.
-0.000
0.00
--
..
+
+0
+1
+.
+1.26
,etc

我不需要使用 e , E 等支持科学记数法。
顺便说一句,我使用的语言是 C#。

4

4 回答 4

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

编辑更新以反映新要求(最后一个小数可以为零)

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

(比使用前瞻更短:^-?(0\.(?=[1-9])\d*|[1-9]\d*(\.\d+)?)$。)


EDIT2如果例如001.000可以通过

^-?(?=.*[1-9])\d+(\.\d+)?$
于 2009-12-02T08:33:27.457 回答
0

这是我经常使用的:

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

在 PHP 示例中使用:

<?php

$s= '1.234e4';

preg_match('~(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?~', $s, $m);
print_r($m);

?>

输出:

Array
(
    [0] => 1.234e4
    [1] =>
    [2] => 1.234
    [3] => e4
)
于 2009-12-02T08:32:05.463 回答
0
-?(?!0)\d+(\.\d+)?

注意:如果您的正则表达式匹配器没有完成,请记住放 ^ $。

请问为什么是“最短”?带有不匹配组的预编译器 RegExp 或相同的编译器可能会更快。零测试也可能更快。

于 2009-12-02T08:53:43.897 回答
0

您可能希望考虑这些变化

于 2010-11-23T15:00:30.207 回答