美文网首页爬虫js css html
爬虫_039_正则高级用法

爬虫_039_正则高级用法

作者: 为宇绸缪 | 来源:发表于2023-02-26 17:50 被阅读0次

    1、分组&起名称

    • 概念

      处理简单的判断是否匹配之外,正则表达式还有提取子串的功能,用()表示的就是要提取的分组

    • 代码

      #给当前匹配到的结果起别名
      s = '3G4HFD567'
      re.match("(?P<value>\d+)",s)
      print(x.group(0))
      print(x.group('value'))
      
    • 说明

      • 正则表达式中定义了组,就可以在Match对象上用group()方法提取出子串来
      • group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串

    2、编译

    • 概念

      当在python中使用正则表达式时,re模块会做两件事,一件是编译正则表达式,如果表达式的字符串本身不合法,会报错。另一件是用编译好的正则表达式提取匹配字符串

    • 编译优点

      如果一个正则表达式要使用几千遍,每一次都会编译,出于效率的考虑进行正则表达式的编译,就不需要每次都编译了,节省了编译的时间,从而提升效率

    • compile()函数

      • 原型

        def compile(pattern, flags=0)
        
      • 作用

        将pattern模式编译成正则对象

      • 参数

        参数 说明
        pattern 匹配的正则表达式(一种字符串的模式)
        flags 标识位,用于控制正则表达式的匹配方式
      • flags

        说明
        re.I 是匹配对大小写不敏感
        re.S 使.匹配包括换行符在内的所有字符
      • 返回值

        编译好的正则对象

      • 示例

        import re
        
        re_phone = re.compile(r"(0\d{2,3}-\d{7,8})")
        print(re_phone, type(re_phone))
        
    • 编译后其他方法的使用

      原型

      def match(self, string, pos=0, endpos=-1)
      def search(self, string, pos=0, endpos=-1)
      def findall(self, string, pos=0, endpos=-1)
      def finditer(self, string, pos=0, endpos=-1)
      

      参数

      参数 说明
      string 待匹配的字符串
      pos 从string字符串pos下标开始
      endpos 结束下标

      示例

      s1 = "lucky's phone is 010-88888888"
      s2 = "kaige's phone is 010-99999999"
      ret1 = re_phone.search(s1)
      print(ret1, ret1.group(1))
      ret2 = re_phone.search(s2)
      print(ret2, ret2.group(1))
      

    3、贪婪与非贪婪

    • 贪婪模式

      贪婪概念:匹配尽可能多的字符

      • .+ 匹配换行符以外的字符至少一次
      • .* 匹配换行符以外的字符任意次

      实例

      res = re.search('<b>.+</b>', '<b></b><b>b标签</b>')
      res = re.search('<b>.*</b>', '<b>b标签</b><b>b标签</b><b>b标签</b><b>b标签</b>')
      
    • 非贪婪模式

      非贪婪概念:尽可能少的匹配称为非贪婪匹配,*?、+?即可

    • .+? 匹配换行符以外的字符至少一次 拒绝贪婪

      • .*? 匹配换行符以外的字符任意次 拒绝贪婪

      实例

      res = re.search('<b>.+?</b>', '<b>b标签</b><b>b标签</b>')
      res = re.search('<b>.*?</b>', '<b>b标签</b><b>b标签</b><b>b标签</b><b>b标签</b>')
      

    相关文章

      网友评论

        本文标题:爬虫_039_正则高级用法

        本文链接:https://www.haomeiwen.com/subject/dhscldtx.html