小数点以下の任意の数の非ゼロ浮動小数点数を一致させることができます最短正規表現とは何ですか?
質問
小数点以下の任意の数の非ゼロ浮動小数点数を一致させることができます最短正規表現は何ですか?
これは、同じ番号を受け入れる必要があります。
-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例で利用
<?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
)
-?(?!0)\d+(\.\d+)?
注:それはあなたの正規表現マッチャによって行われていない場合は、^ $を置くことを忘れないでください。
。私がなぜ「最短」聞いてもいいですか?前コンパイラの正規表現または一致しないグループと同じことが速く可能性があります。また、ゼロのためのテストはおそらく速く過ぎる可能性があります。
あなたはを検討したいかもしれませんのます。
所属していません StackOverflow