Python 正則表達式:只要整數和小數


要求用戶只能輸入數字(包括整數和小數),如何用正則表達式驗證用戶輸入?

有兩種思路:

1. 給出正確格式的正則表達式,然后看輸入是否合法。

2. 列出所有錯誤的輸入,看輸入是否非法。

對於思路1,想想其實有點不可靠,因為Python關於正則表達式的re模塊中,只有match()、search()、findall()方法可用,而它們都是在給出的字符串中查找匹配給定模式(Pattern)的子串,找到了就返回子串,沒有就返回None,並不是說整個字符串是否匹配該Pattern,按照思路1,若稍不注意,就達不到想要的效果,例如

 1 def isNumReg(str):
 2     regInt='\d+'#能匹配123、123.63、123eabd、abc236等所有包含了數字的字符串
 3     regInt2='\d+$'#能匹配123、123.63、abc236等所有以數字結尾的字符串
 4     regInt2='^\d+$'#只能匹配1、12、123等只包含數字的字符串
 5     regFloat='\d+\.\d+'#能12.36、efa56.63、wwe56.56abc等字符串
 6     regFloat2='^\d+\.\d+$'#能匹配2.36、0.36、00069.63、0.0、263.25等
 7   
 8     #以下是整數和小數正確的正則表達式
 9     regInt='^0$|^[1-9]\d*$'#不接受09這樣的為整數
10     regFloat='^0\.\d+$|^[1-9]\d*\.\d+$'
11     #接受0.00、0.360這樣的為小數,不接受00.36,思路:若整數位為零,小數位可為任意整數,但小數位數至少為1位,若整數位為自然數打頭,后面可添加任意多個整數,小數位至少1位
12     
13     regIntOrFloat=regInt+'|'+regFloat#整數或小數
14 
15     patternIntOrFloat=re.compile(regIntOrFloat)#創建pattern對象,以便后續可以復用
16     if patternIntOrFloat.search(str):
17         return True
18     if re.search(patternIntOrFloat,str):
19         return True
20     if re.search(regIntOrFloat,str):
21         return True
22     else:
23         return False
24                 
25 if __name__=='__main__':
26     print isNumReg("0.360")#True

第2-6行說明開始符號(^)和結束($)的作用,

第9行、第13行說明了正則表達式中“或者”的表示方法為一條豎線('|')

第16行、第18行、第20行三者相互等價,即可以用pattern對象的search方法,也可以將pattern對象作為re.search()的參數,也可以將模式字符串作為re.search()的參數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM