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

ぃ、小莉子 提交于 2019-12-21 04:18:17

问题


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.


回答1:


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



回答2:


This is the one I always use:

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

Utilized in a PHP example:

<?php

$s= '1.234e4';

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

?>

Output:

Array
(
    [0] => 1.234e4
    [1] =>
    [2] => 1.234
    [3] => e4
)



回答3:


-?(?!0)\d+(\.\d+)?

Note: Remember to put ^ $ if it's not done by your regexp matcher.

May I ask why the "shortest"? A pre-compiler RegExp or the same with non-matching groups could be faster. Also a test for zero could possibly be faster too.




回答4:


You might wish to consider these variations.



来源:https://stackoverflow.com/questions/1831419/whats-the-shortest-regex-that-can-match-non-zero-floating-point-numbers-with-an

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!