zoukankan      html  css  js  c++  java
  • 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()的参数。

  • 相关阅读:
    200斤的甄子丹还是这么灵活能打欢乐,拯救无聊就靠他了
    redis 发布与订阅
    洛谷P2294 [HNOI2005]狡猾的商人
    洛谷P2294 [HNOI2005]狡猾的商人
    崛起于Springboot2.X之开发拦截器(21)
    pfSense®2.4.4发布后,原pfSense 黄金会员的服务将免费使用!
    pfSense®2.4.4发布后,原pfSense 黄金会员的服务将免费使用!
    pfSense®2.4.4发布后,原pfSense 黄金会员的服务将免费使用!
    pfSense®2.4.4发布后,原pfSense 黄金会员的服务将免费使用!
    Openssh
  • 原文地址:https://www.cnblogs.com/aaronhoo/p/5439509.html
Copyright © 2011-2022 走看看