精度が2の10進数を表す正規表現は何ですか?
有効な例です。
123.12 2 56754 92929292929292.12 0.21 3.1
無効な例:
12.1232 2.23332 e666.76
小数点は省略可能で、整数が含まれる場合もあります。
有効な正規表現のトークンは、実装によって異なります。一般的な形としては
[0-9]+(\.[0-9][0-9]?)?
よりコンパクトです。
\d+(\.\d{1,2})?
どちらも小数点以下の桁が前後に1つ以上あることが前提です。
文字列全体がこの形式の数値であることを要求するには、次のように式を開始タグと終了タグで囲みます(Perl'の形式)。
^\d+(\.\d{1,2})?$
小数点以下の先頭に桁がない数字(.12)と,末尾にピリオドがある整数(12.)にマッチさせつつ,ピリオド1つ(.)の入力を除外するには,次のようにします。
.12
12.
.
^(\d+(\.\d{0,2})?|\.?\d{1,2})$
小数部分を ()? で囲み、省略可能にしました。 ただし、12.のような形は除外されています。
()?
繰り返しを止めて、10進数の整数部分に制限を与えるために、^\d{1,6}(\.d{1,2})?$を使用します。
^\d{1,6}(\.d{1,2})?$
^[0-9]+(\.[0-9]{1,2})?$
また、正規表現は読むのも理解するのも大変なので、ここでは冗長な表現にしています。
^ # Start of string [0-9]+ # Require one or more numbers ( # Begin optional group \. # Point must be escaped or it is treated as "any character" [0-9]{1,2} # One or two numbers )? # End group--signify that it's optional with "?" $ # End of string
ほとんどの正規表現の実装(最も一般的なPCREを含む)では [0-9] を \d と置き換えることができます。私は[0-9]のままにしていますが、その方が読みやすいと思うからです。
[0-9]
\d
また、チェックに使った簡単なPythonスクリプトは以下の通りです。
import re deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""") valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"] invalid = ["12.1232", "2.23332", "e666.76"] assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid) assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0
e666.76 "の "e "を考慮する必要があるのではないですか?
また
(e|0-9)\d*\d.\d{1,2)
有効な正規表現のトークンは、実装によって異なります。一般的な形としては
よりコンパクトです。
どちらも小数点以下の桁が前後に1つ以上あることが前提です。
文字列全体がこの形式の数値であることを要求するには、次のように式を開始タグと終了タグで囲みます(Perl'の形式)。
小数点以下の先頭に桁がない数字(
.12
)と,末尾にピリオドがある整数(12.
)にマッチさせつつ,ピリオド1つ(.
)の入力を除外するには,次のようにします。追加
小数部分を
()?
で囲み、省略可能にしました。 ただし、12.
のような形は除外されています。Added
繰り返しを止めて、10進数の整数部分に制限を与えるために、
^\d{1,6}(\.d{1,2})?$
を使用します。また、正規表現は読むのも理解するのも大変なので、ここでは冗長な表現にしています。
ほとんどの正規表現の実装(最も一般的なPCREを含む)では
[0-9]
を\d
と置き換えることができます。私は[0-9]
のままにしていますが、その方が読みやすいと思うからです。また、チェックに使った簡単なPythonスクリプトは以下の通りです。
e666.76 "の "e "を考慮する必要があるのではないですか?
また