What's the shortest regex that can match non-zero floating point numbers with any number of decimal places?

c#, match, numbers, regex

Solution

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

EDIT Updated to reflect new requirements (last decimals can be zero)

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

(Shorter than using lookahead: `^-?(0\.(?=[1-9])\d*|[1-9]\d*(\.\d+)?)$`.)

EDIT2 If e.g. `001.000` can pass

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

Problem

What's the shortest regex that can match non-zero floating point numbers with any number of decimal places? It should accept numbers like ``` -1 -5.9652 -7.00002 -0.8 -0.0500 -0.58000 0.01 0.000005 0.9900 5 7.5 7.005 ``` but reject constructions such as ``` . .02 -. -.996 0 -0 0. -0. -0.000 0.00 -- .. + +0 +1 +. +1.26 ,etc ``` I do not need support for the scientific notation, with e , E and such. The language I'm using is C#, by the way.

Original source

Related problems