• Python——re模块


    re模块

    1. 匹配常用方法

    (1) findall

      返回值:列表:列表中是所有匹配到的项

    import re
    ret = re.findall('a','eva egon yuan')       #['a', 'a']
    print(ret)
    ret = re.findall('[a-z]+','eva egon yuan')      #['eva', 'egon', 'yuan']
    print(ret)
    View Code

    (2) search

      ret = search('d(w)+','bdsjdbc14564fvfv')

      ret = search('d(?P<name>w)+','bdsjdbc14564fvfv')   #给分组命名为name

      找整个字符串,遇到匹配上的就返回,遇不到就返回None

      如果有返回值,ret.group()就可以取到值

      取分组中的内容:ret.group(1)  #按照组的顺序(从第一个开始)

              ret.group('name')  #按照组的名字

    import re
    
    ret = re.search('a','eva egon yuan')
    print(ret)  #<_sre.SRE_Match object; span=(2, 3), match='a'>
    print(ret.group())  #a
    View Code
    import re
    
    # 报错:如果没有找到结果,那么返回None,调用group会报错
    # ret = re.search('m','eva egon yuan')
    # print(ret)  #None
    # print(ret.group())  #AttributeError: 'NoneType' object has no attribute 'group'
    
    # 使用下面方法不报错
    # (1) 找到结果
    ret = re.search('a','eva egon yuan')
    if ret:
        print(ret.group())  #a
    #  (2) 没有找到结果
    ret = re.search('m','eva egon yuan')
    if ret:
        print(ret.group())  #无任何结果,也不报错
    View Code

    (3) match

       从头开始匹配,匹配上就返回,匹配不上就返回None

      匹配上:ret.group()取值

    import re
    
    # 如果正则规则从头开始可以匹配上,则返回一个变量,调用group显示
    # 如果没匹配上,就返回None,调用group会报错
    ret = re.match('[a-z]+','eva egon yuan')
    if ret:
        print(ret.group())  #eva
    View Code

    2. 其他常用方法

    (1) 分割 split

    import re
    
    # 先按照'a'分割得到''和'bcd',再对''和'bcd'分别按照'b'分割
    ret = re.split('[ab]','abcd')
    print(ret)  #['', '', 'cd']
    View Code

    (2) 替换 sub  subn

    import re
    
    # 将数字替换成'H',参数1表示替换一次
    ret = re.sub('d','H','eva3egon4yuan4',1)
    print(ret)  #evaHegon4yuan4
    View Code
    import re
    
    # subn
    # 将数字替换成'H',返回替换结果和替换次数
    ret = re.subn('d','H','eva3egon4yuan4')
    print(ret)  #('evaHegonHyuanH', 3)
    View Code

    (3) 返回迭代器 finditer

      返回很多值,不想让它们一次性全部出现在内存里

    import re
    
    # 返回一个存放匹配结果的迭代器
    ret = re.finditer('d','ds3sy4764384a')
    print(ret)  #<callable_iterator object at 0x0000013D05E83198>
    # 查看第一个结果
    print(next(ret).group())    #3
    # 查看第二个结果
    print(next(ret).group())    #4
    # 查看剩余的所有结果
    print([i.group() for i in ret]) #['7', '6', '4', '3', '8', '4']
    
    # 查看所有匹配结果:循环打印其中的数字
    ret = re.finditer('d','ds3sy4764384a')
    for i in ret:
        print(i.group())    # 3     4       6       7       3       8       4
    View Code

    (4) 编译 compile

      正则表达式很长且要多次使用

    import re
    
    # 将正则表达式编译成一个正则表达式对象
    obj = re.compile('d{3}')   #此规则要匹配3个数字
    ret = obj.search('abc123eeee')
    print(ret.group())  #123
    ret = obj.search('412e')
    print(ret.group())  #412
    ret = obj.search('abgfnjgn78967ee')
    print(ret.group())  #789
    View Code

    3. 分组优先

    (1)findall的优先级查询——?:

    import re
    
    ret = re.findall('www.(baidu|oldboy).com','www.oldboy.com')
    print(ret)  #['oldboy']
    # ?:——取消分组优先
    ret = re.findall('www.(?:baidu|oldboy).com','www.oldboy.com')
    print(ret)  #['www.oldboy.com']
    View Code

    (2)split的优先级查询——()

    import re
    
    ret = re.split("d+","eva3egon4yuan")
    print(ret)  #['eva', 'egon', 'yuan']
    # 加()——取消分组优先
    ret = re.split("(d+)","eva3egon4yuan")
    print(ret)  #['eva', '3', 'egon', '4', 'yuan']
    View Code

     

    长得丑就应该多读书。我爱学习,只爱学习,最爱学习!
  • 相关阅读:
    亚马逊云服务器VPS Amazon EC2 免费VPS主机配置CentOS及其它内容
    Linux + Mono 目前已经支持Entity Framework 6.1
    CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
    Linux CentOS下如何确认MySQL服务已经启动
    C#使用Timer.Interval指定时间间隔与指定时间执行事件
    MySQL数据库有外键约束时使用truncate命令的办法
    C++中字符和字符串的读取与使用
    结构体的运算符重载
    P1358 扑克牌
    P1284 三角形牧场
  • 原文地址:https://www.cnblogs.com/xc-718/p/9757212.html
Copyright © 2020-2023  润新知