• re模块


    一、findall与search方法

    import re
    
    
    ret = re.findall('d', '19621asd1695412rf')
    print(ret)
    
    ret1 = re.search('d+r', '19621asd1695412rf')
    print(ret1) # 对象
    if ret1:
        print(ret1.group())
    

    # 分组现象 # findall 按照完整的正则进行匹配,但是显示括号里匹配到的内容 ret2 = re.findall('9(d)d', '19621asd1695412rf') print(ret2) ret3 = re.search('9(d)(d)', '19621asd1695412rf') print(ret3) # 对象 if ret3: print(ret3.group()) # 取第一个符合正则的内容 print(ret3.group(1)) # group(n)指定获得的第n个分组匹配到的内容 print(ret3.group(2)) # 为什么在search中不需要分组优先,而在findall中需要? # findall # 加上括号,是为了对真正需要的内容进行提取 s = '<h1>dasdsa930sadsa02391-</h1>' ret = re.findall('<.*?>(.*)</.*?>', s) print(ret[0]) # search ret = re.search('<.*?>(.*)</.*?>', s) print(ret.group(1)) # 为什么要用分组,以及findall的分组优先 s1 = '2-3*(5+6)' # 匹配出a+b 或者a-b 并计算它们的结果 ret = re.findall('(d+)+(d+)', s1) print(ret) print(int(ret[0][0]) + int(ret[0][1])) # with open('movie_name.txt', encoding='utf-8') as f: #print(f.read()) content = f.read() r = re.findall('<span class="title">(.*?)</span>.*?</a>', content, flags=re.S) print(r) print(len(r)) # 如果我们要查找的内容在一个复杂的环境中 # 我们要查找的内容并没有一个突出的特点,甚至会和不需要的数据杂乱的混合在一起 # 这个时候我们就需要把所有的数据都统计出来,然后对这个数据进行筛选,把我们真正 # 需要的数据对应的正则表达式用()括起来 # 这样我们就可以拿到真正想要的数据啦 # 取消分组的优先级 ret = re.findall('1(?:d)(d)', '123') # 取消第一个分组的优先级 print(ret)

    二、其他方法

    import re
    
    # findall  ***
    # search  ***
    
    
    # # compile  *** --节省代码时间的工具
    # # 假如同一个正则表达式要被使用多次,就可以先解析该正则表达式并通过一个变量保存下来
    # ret = re.compile('d+')
    # print(ret.findall('s961gdx123fd'))
    #
    #
    # # finditer  *** --节省空间
    # ret = re.finditer('d+', 's961gdx123fd') # 迭代器
    # for i in ret:
    #     print(i.group())
    
    # 先 compile(如果没有重复使用同一个正则,也不能节省时间)后finditer
    ret = re.compile('d+')
    res = ret.finditer('fd321df6fd46d11')
    for i in res:
        print(i.group())
    
    
    # # match   默认从头开始匹配,一般用来规定该字符串必须是什么样的
    # ret = re.match('d+', '123eva456taibai')
    # print(ret.group())
    
    
    # # split
    # ret = re.split('d+', 'alex222wusir')
    # print(ret)
    # ret = re.split('d(d)d', 'alex222wusir') # 保留括号内被切掉的内容
    # print(ret)
    #
    #
    # # sub  替换  将正则匹配到的内容替换成别的内容
    # ret = re.sub('d+', 'H', 'alex123wusir456')
    # print(ret)
    #
    #
    # # subn  # 也是替换,返回替换后的内容和替换的次数形成的元组
    # ret = re.subn('d+', 'H', 'alex123wusir456')
    # print(ret)
    
    
    
    # 功能
    # 性能
        # 时间:
            # 完成一个代码所需要执行的代码行数
            # 执行代码的过程中,底层程序是如何工作的
    
        # 空间
            # 是占用了宝贵的内存资源
            # 英雄程序的执行效率
    
    
    # 用户体验

    三、分组命名

    # 分组命名:(?P<组名>正则)  (?P=组名)
    import re
    
    ret = re.search('d(d)d(?P<name1>w+?)(d)(?P<name2>w)', '1231sd1_52432ghbr')
    print(ret.group('name1'))
    print(ret.group('name2'))
    
    
    # 分组命名的引用:****
    exp = '<h1>sad654a6s4dv</h1><a>5621df</a>'
    ret = re.search('<(?P<n1>w+)>(.*?)</(?P=n1)>', exp)
    print(ret.group())
    print(ret.group(2))
    
    
    # 方式二:不常用
    # exp = '<h1>sad654a6s4dv</h1><a>5621df</a>'
    # ret = re.search(r'<(w+)>(.*?)</1>', exp)
    # print(ret.group())
    # print(ret.group(2))
    
    
    # r""  取消字符串内部所有的转义
    ret = re.search(r'\n', r'
    ')
    print(ret.group())

      

  • 相关阅读:
    数据库pubs
    当前目录中查找特定类型的文件
    DBHelper,ADO直接操作数据库,扩展DataTable操作数据裤的方法
    行记录次序+等差数列
    面试的通用要求
    zoj_3367Connect them
    hdoj_4198Quick out of the Harbour
    Win32常见异常
    hdoj_1026Ignatius and the Princess I
    移动 II
  • 原文地址:https://www.cnblogs.com/GOD-L/p/13528934.html
Copyright © 2020-2023  润新知