• re模块和分组 random模块


    一,re模块

    1.   findall     search      match     (查找,匹配)

        findall方法括号内参数 正则,字符串, 返回值是一个列表,匹配不到返回[] 空列表

               如   ===>    ret = re.findall('s+','kjewhfqho254qfewgf')               print(ret)

        search 方法括号内参数 正则,字符串, 匹配到返回值是对象空间,,没有匹配到则返回None,  也经常用到if 语句中,如if ret1:print(ret1.group()) # 返回的对象通过group来获                             取匹配到的第一个结果

               如   ===>    ret1 = re.search('d','dg;ijwpggg.weqge') print(ret1)

        match与search方法相类似,区别在于相当于在正则的开头加了了^ ,用来判断以什么开始的,不建议用

                如   ===>    ret2 = re.match('d+','afw321653afdwqef')              print(ret2.group()) 

    2.     sub    subn  (替换)              split   (切割)

        sub方法,括号内 正则,替换的新值,字符串,替换次数(多少不会报错),返回值是字符串类型

        subn 跟sub一样,除了会返回替换后的结果,还会返回替换的次数,是元组类型

                如   ===>   ret3 = re.sub('d+','H','53463434dweqf53we1gfw5f')       print(ret3) 

         split切割方法括号内 正则,字符串 返回值是个列表,     注意:   处理数据时,如果被切割的也显示出来,那就给正则那里加个括号(),这样就能显示出来

                如     ===>   ret4 = re.split('d+','wegwerwg2564gfwe3g156') print(ret4) 

    3        ret5 = re.compile('-0.d+|-[1-9]+(.d+)?') # 多次用到这个正则表达式时,那么就用compile 命令节省时间效率

              res = ret5.search('fgqgioh521-4551312qgwfgqwfge')# 只用传字符串就行

              print(res.group())

         ret0 = re.finditer('d+','kfhqhegf564646.weg545-we5g4') #注意这个命令会帮我们拿到符合正则的字符串的迭代器,节省空间

         for r in ret0:

            print(r.group())

    4,   findall   会优先显示分组中的内容,要想取得分组优先,   (?:正则表达式) 正则前面加?:

         split 遇到分组 会保留分组内被切掉的内容

         search 如果search中有分组的话,通过group(n)就能够拿到group中的匹配的内容

    5,  分组的命名

         启名字

        (?P<name>正则表达式) 表示给分组起名字

        如:   ====>        ret = re.search('<(?P<name>w+)>w+</(?P=name)>','<h1>hello</h1>') print(ret.group('name'))

         通过索引使用分组

        (?P=name)表示使用这个分组,这里匹配到的内容应该和分组中的内容完全相同

        如:      ====>     ret = re.search('d+(.d+)(.d+)(.d+)?','1.2.3.4-2*(60+(-40.35/5)-(-4*3))')

                           print(ret.group())     print(ret.group(1))        print(ret.group(2))

    二,(1)random模块    随机算法: 在某个范围内,取到每一个值的概率是相等的

       无限循环小数计算机可以表达,无限不循环小数,计算机表达不了,π这个值是也不能取完,它在单独的math模块里

       import  random

       随机小数

       random.random()        ===>  0-1之内的随机小数

       random.uniform(1,5)    ===>  1-5之内的随机小数

       随机整数

       random.randint(1,2)    这是闭区间,顾头顾尾

       random,randrange(1,2)   这是顾头不顾尾             random.randrange(1,6,2)  按步长取值,顾头不顾尾   

       随机抽取   能操作字符串,列表,元组,字典不可操作

       random.choice(1)       ==>  随机抽取一个值

       random.sample(lis,2)   ===>  随机抽取多个值

       打乱顺序   (只能操作列表)

       random.shuffle(lis)

    (2)    随机生成4位数字验证码:(也可指定多位数字验证码)

        def ran_code(n = 4):

             code = ''

             for i in range(n):

                 num = random.randint(0,9)

                 code = code + str(num)

             return code

        ret = ran_code(6)   

    (3)  随机生成4包含数字和大小写字母(也可指定多位数字验证码)

        def ran_code(n = 4,a = Ture):

             code = ''

             for i in range(n):

                 ran_num = str(random.randint(0,9))

                 if a:

                     ran_alph = chr(random.randint(97,122))

                     ran_alph_upper = chr(random.randint(65,90))

                     ran_num = random.choice(ran_num,ran_alph,ran_alph_upper)

                 code = code + ran_num

              return code

         ret = ran_code(6,a = False)

         print(ret)

     

     

        

       

  • 相关阅读:
    HDOJ2036 改革春风吹满地
    NYOJ3 多边形重心问题
    HDOJ1085Holding BinLaden Captive!(母函数做法)
    SQL Server2005杂谈(5):将聚合记录集逆时针和顺时针旋转90度(行列互换)
    使用wxWidgets进行跨平台的C++开发
    SQL Server2005杂谈(2):公用表表达式(CTE)的递归调用
    HeadFirst设计模式学习笔记(C#版):鸭子与策略(Strategy)模式
    选择创业项目的基础——适合自己的才是最好的
    博客也是网络赚钱的有利工具
    SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL
  • 原文地址:https://www.cnblogs.com/laogao123/p/9438565.html
Copyright © 2020-2023  润新知