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

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

它应该接受像这样的数字

-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#。

 ^-?(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+)?$ 

这是我经常使用的那个:

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

在PHP示例中使​​用:

  

输出:

 Array ( [0] => 1.234e4 [1] => [2] => 1.234 [3] => e4 ) 
 -?(?!0)\d+(\.\d+)? 

注意:如果你的regexp匹配器没有完成,请记住放^。

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

您可能希望考虑这些变化 。