私はPythonスクリプトを書いており、コード内の特定のポイントでユーザーに整数または浮動小数点を入力するように依頼し、正規表現を使用して正しい値を入力したことを確認します。
これは私のスクリプトの入力部分です。
import re
ask = input('Please enter some number or float: ')
match = re.match('\d+\.\d+|\d+', ask)
if match:
print(match.group())
else:
print('[!] Invalid value !')
これで、ユーザーがfloatと入力すると22.
一致しますが、22
そうなることを願っています。22.0
もし彼が入ったら.22
ゲームは終わるだろうがNone
、そうなることを願って0.22
正規表現を使用してこれをどのように実行できますか?
答え1
カンマの前後に数字がない可能性がある数字を一致させるには、などの正規表現が必要です\d+(\.\d*)?|\.\d+
。
基本的には、次の4つの状況があります。
123
123.456
123.
.456
整数部分と小数部分の両方をオプションにすることはできません。ポイントもオプションであり、ポイント自体だけでは許可されてはならないからです。
少なくとも2つのオプションが必要です。\d+(\.\d*)?
整数部分がある数字と一致し、オプションで小数部分に点があり、0 個以上の数字が続くため、最初の 3 つの場合が該当します。 2番目の部分はドットで始まり、後に数字が続く最後のケースと一致します。
それはまだそのまま返されますが、.22
点が22.
最初の文字か最後の文字であるかを確認するためのチェックを簡単に追加し、不足しているゼロを追加できます。例えばre.sub()
:
#!/usr/bin/python3
import re, sys
m = re.match("^(\d+(\.\d*)?|\.\d+)$", sys.argv[1])
if not m:
print("no match")
exit(1)
s = m.group()
print(s)
s = re.sub("^\.", "0.", s);
s = re.sub("\.$", ".0", s);
print(s)