• re模块


    一.re模块

    1.根据正则表达式查找内容

    1.findall  search match

    import re
    ret=re.findall('d+','dakljwdi1564ssdnsh13')
    print(ret)
    #返回列表 检索出的内容是字符串格式
    
    
    
    ret=re.search('d+','iuehfkajn1643s5ad435d14534s')
    print(ret)
    print(ret.group())
    #返回显示结果集<_sre.SRE_Match object; span=(9, 13), match='1643'>
    #span(9,13)是索引值,match=‘1643’只能取到第一值
    print(ret.group(0))
    # print(ret.group(1))         #只取第一个值  所以会报错
    #IndexError: no such group
    
    
    ret=re.search('d+','iuehfkajns')
    #这里检索内容无匹配项。返回时none,那么.group()就是报错
    print(ret)
    # print(ret.group())
    #AttributeError: 'NoneType' object has no attribute 'group'
    
    ret=re.match('d+','djsk123da')
    ret1=re.match('d+','123dasdsqdq123')
    #检索是是否已数字开头
    print(ret)
    print(ret1)
    print(ret1.group(0))
    #若有返回值,显示一个结果集,也要通过.group 取值


    结果: ['1564', '13'] <_sre.SRE_Match object; span=(9, 13), match='1643'> 1643 1643 None None <_sre.SRE_Match object; span=(0, 3), match='123'> 123

    match等价于search

    import re
    ret = re.match('^d+', '12454sdd')#默认是以数字开头,^d+==d+
    #ret = re.match('d+', '12454sdd')  等价于上面等式
    ret1 = re.search('^d+', '12454sdd')    #等价于上面等式
    print(ret)
    print(ret1)
    #有返回值也是一个结果集,通过.group取值
    #无返回值显示none
    

    2.替换内容:

    sub 与  subn

    import re
    ret=re.sub('d+','男神','meets12wusir56')
    #替换数字为男神
    ret1=re.sub('d+','男神','meets12wusir56',1) #后面跟着1 是count 计数替换位置
    print(ret) print(ret1) 结果: meets男神wusir男神 <class 'str'> meets男神wusir56

    subn用法与sub一样   只是返回值是元组形式。

    ret=re.subn('d+','男神','meets12wusir56')
    ret1=re.subn('d+','男神','meets12wusir56',1)
    print(ret,type(ret))
    print(ret1)
    结果:
    ('meets男神wusir男神', 2) <class 'tuple'>
    ('meets男神wusir56', 1)
    

    3.切割:

    import re
    ret=re.split('d+','meet23wusir23')
    print(ret)
    #返回列表形式,切割按照数字
    结果:
    
    ['meet', 'wusir', '']
    

    4.对于重复使用的过程  我们为了节约时间,可以使用compile()

    注意:1,时间 2,空间 3,用户体验

    import re
    par=re.compile('d+')           #先统一编译
    ret=par.split('djsa554ds45ds')
    print(ret)
    ret1=par.search('dhjjsakh165ds4s5')
    print(ret1)
    print(ret1.group(0))
    ret2=par.findall('jdklsajd544dsa5')
    print(ret2)
    结果:
    ['djsa', 'ds', 'ds']
    <_sre.SRE_Match object; span=(8, 11), match='165'>
    165
    ['544', '5']
    

    5.为了空间,我们引入finditer

    ret=re.finditer('d+','dksjak1234sda5'*200)
    for i in ret:
        print(i)
        print(i.group())
    结果:
    <_sre.SRE_Match object; span=(2792, 2796), match='1234'>
    1234
    <_sre.SRE_Match object; span=(2799, 2800), match='5'>
    5


    6.findall 永远优先显示分组内容。findall+()

    import re
    ret=re.findall('>(w+)<',r'<title>15a4d3a45e<	itle>')#优先显示分组内容
    print(ret)
    
    #如何取消分组?
    ret=re.findall('>(?:w+)<',r'<title>15a4d3a45e<	itle>')
    print(ret)
    结果:
    ['15a4d3a45e']
    ['>15a4d3a45e<']
    

    优先分组需要注意:

    import re
    ret = re.findall('www.(?:baidu|oldboy).com',r'www.baidu.com')#取消分组优先
    ret1 = re.findall('www.(baidu|oldboy).com',r'www.baidu.com')#分组优先
    print(ret)
    print(ret1)
    结果:
    ['www.baidu.com']
    ['baidu']
    

      

    import re
    ret = re.findall('d+(?:.d+)?',r'1.23+2.34')
    ret1 = re.findall('d+(.d+)?',r'1.23+2.34')
    print(ret)
    print(ret1)
    结果:
    ['1.23', '2.34']
    ['.23', '.34']
    

      

    7.spilt+()保留切割在分组的内容:

    import re
    ret=re.split('(d+)','hjdsakd2564asd5sa4d5s4a6das')
    print(ret)
    结果:
    #显示了切割的内容 数字也返回去了 ['hjdsakd', '2564', 'asd', '5', 'sa', '4', 'd', '5', 's', '4', 'a', '6', 'das']
    ret = re.split('d(d)','alex84wusir73')
    #优先显示第二个数字
    print(ret)
    结果:
    ['alex', '4', 'wusir', '3', '']
    

    8.search+()

    import re
    ret = re.search(r'<(w+)>(w+)<\(w+)>',r'<title>qqxing<	itle>')
    print(ret.group())  # 不受到分组的影响
    print(ret)              # 不受到分组的影响,结果集
    print(ret.group(1)) #对于括号的分组1
    print(ret.group(2)) #对于括号的分组2
    print(ret.group(3)) #对于括号的分组3
    结果:
    <title>qqxing<	itle>
    <_sre.SRE_Match object; span=(0, 21), match='<title>qqxing<\title>'>
    title
    qqxing
    title
    

     再看看不加分组的区别:

    import re
    ret = re.search(r'<w+>w+<\w+>',r'<title>qqxing<	itle>')
    print(ret.group())  # 不受到分组的影响
    print(ret)  # 不受到分组的影响
    print(ret.group(1)) #对于括号的分组1
    print(ret.group(2)) #对于括号的分组2
    print(ret.group(3)) #对于括号的分组3
    
    #这里search只取第一个值   所以就没有分组
    结果:
    <title>qqxing<	itle>
      File "F:/pycharmproject/新建文件夹/day0322/demo.py", line 90, in <module>
    <_sre.SRE_Match object; span=(0, 21), match='<title>qqxing<\title>'>
        print(ret.group(1)) #对于括号的分组1
    IndexError: no such group
    

      这样就报错了!

    9.分组命名:

    import re
    ret = re.search(r'<(?P<tab1>w+)>(?P<content>w+)<\(w+)>',r'<title>qqxing<	itle>')
    print(ret.group(0))  # 不受到分组的影响
    print(ret.group('tab1'))  # 不受到分组的影响
    print(ret.group('content'))  # 不受到分组的影响
    结果:
    <title>qqxing<	itle>
    title
    qqxing
    

      

  • 相关阅读:
    SQL SERVER使用技巧集
    WIN32串口编程
    经典FLASH收藏
    Windows下WinsockAPI研究
    数据库连接大全[转自中国站长网]
    VirtualBox自动重启之谜
    写个设置命令的VBS脚本工具。
    VB中KeyCode的取法
    实现串口编程的三种方法
    .NET的命名空间
  • 原文地址:https://www.cnblogs.com/Zhao159461/p/10578897.html
Copyright © 2020-2023  润新知