Regular-Expression
如何使用正則表達式將單個浮點數替換為 0
我正在編寫 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
我如何使用正則表達式來做到這一點?
要匹配逗號前後可能沒有數字的數字,您需要一個正則表達式,例如
\d+(\.\d*)?|\.\d+
.基本上,有四種不同的情況:
123 123.456 123. .456
您不能同時使整數和小數部分都是可選的,因為點也是可選的,並且無論如何都不應該接受單獨的點。
我們至少需要兩種選擇。
\d+(\.\d*)?
匹配帶有整數部分的數字,後跟可選的點和小數部分中的零個或多個數字,所以前三種情況。第二部分匹配最後一種情況,它以點開頭,後面有一些數字。它仍然返回
.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)