小数点以下の任意の数の非ゼロ浮動小数点数を一致させることができます最短正規表現とは何ですか?

StackOverflow https://stackoverflow.com/questions/1831419

  •  11-09-2019
  •  | 
  •  

質問

小数点以下の任意の数の非ゼロ浮動小数点数を一致させることができます最短正規表現は何ですか?

これは、同じ番号を受け入れる必要があります。

-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+)?

注:それはあなたの正規表現マッチャによって行われていない場合は、^ $を置くことを忘れないでください。

私がなぜ「最短」聞いてもいいですか?前コンパイラの正規表現または一致しないグループと同じことが速く可能性があります。また、ゼロのためのテストはおそらく速く過ぎる可能性があります。

あなたはを検討したいかもしれませんのます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top