• re模块进阶


    re模块

    三个常用的方法

    findall

    • 会匹配到字符串中的所有符合规则的项
    • 并返回一个列表
    • 如果未匹配到返回空列表
    import re
    ret = re.findall("d","yang123")
    print(ret)
    #输出结果
    #['1', '2', '3']
    
    import re
    ret = re.findall("d+","yang123")
    print(ret)
    #输出结果
    #['123']
    
    
    • 会从头到尾匹配字符创中取出第一个符合条件的项
    • 如果匹配到了,返回一个对象,用group取值
    • 如果没匹配到,返回None,不能用group
    import re
    ret = re.search("d+","yang123")
    print(ret) #此处输出的是一个对象
    print(ret.group())
    #输出结果
    #123
    
    import re
    ret = re.search("d","yang123")
    print(ret) #此处输出的是一个对象
    print(ret.group())
    #输出结果
    #1
    #会从头到尾匹配匹配字符串中取出第一个符合条件的项
    
    import re
    ret = re.search("^d","yang123")
    print(ret) #如果匹配上返回一个对象,如果不能匹配上返回NONE
    print(ret.group())如果是None则报错
    #输出结果
    

    match

    • 会从头开始匹配字符串中取出从第一个字符开始是否符合规则
    • 如果符合,就返回对象,用group取值
    • 如果不符合,就返回none
    • match = serch + ^正则
    ret = re.match("d","1yang123")
    print(ret)
    #输出结果
    #1
    

    进阶方法

    • 时间复杂度——效率——compile
      • 在同一正则表达式重复使用多次的时候使用能够减少时间的开销
    • 空间复杂度——内存占用率——finditer
      • 在查询的结果超过1个的情况下,能够有效的节省内存,降低空间复杂度,从而也降低了时间的复杂度
    • 用户体验

    finditer

     ret = re.findall("d","1yang123"*200000000)
     print(ret)#效率低,内存一下子干死
    
    ret = re.finditer("d","1yang123"*200000000) #迭代器
    for i in ret: #迭代出来的每一项都是一个对象
        print(i.group()) #通过group取值即可
    

    compile

    • 是一种编译方法,把正则表达式编译成python能理解的形式,节省重复的时间
    • 在同一正则表达式重复使用多次的时候使用能够减少时间的开销
    ret = re.compile("d+")
    print(ret)
    r1 = ret.search("ynag123")
    print(r1)
    r2 = ret.findall("zi456")
    print(r2)
    r3 = ret.finditer("laing789")
    print(r3)
    
    
    #compile与finditer联用
    import re
    ret = re.compile("d+")
    r3 = ret.finder("taiban123")
    for i in r3:
        print(i.group())
    #输出结果
    #1
    #2
    #3
    

    split

    import re
    ret = re.split("d","abaiysa12kccgsud21s")#默认只保留分组当中的内容
    print(ret)
    #输出结果
    #['abaiysa', '', 'kccgsud', '', 's']
    
    
    #保留分组数字
    import re
    ret = re.split("(d+)","abaiysa12kccgsud21s")
    print(ret)
    #输出结果为
    #['abaiysa', '12', 'kccgsud', '21', 's']
    

    sub、subn

    import re
    ret = re.sub("d","D","agsiaig12kjd") #对其进行替换
    print(ret)
    #输出结果
    #agsiaigDDkjd
    
    ret = re.subn("d","D","agsiaig12kjd")#可以显示结果和更换次数
    print(ret)
    #输出结果
    #('agsiaigDDkjd', 2)
    
    ret = re.subn("d","D","agsiaig12kjd",1) #只更换第一处
    print(ret)
    #输出结果
    #('agsiaigD2kjd', 1)
    
    记录学习的点点滴滴
  • 相关阅读:
    linux基础
    1-1python自动化测试环境搭建及开发工具安装
    Linux常用命令
    049.NET5_中间件
    045.NET5_基本鉴权授权
    044.NET5_基于Session_Cookies认证
    042-043.NET5_ResultFilter以及双语言应用
    041.NET5_ExceptionFilter
    040.NET5_ExceptionFilter
    039.NET5_自定义Filter匿名
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/14880524.html
Copyright © 2020-2023  润新知