【爬虫基础】正则表达式

作者 : icbug 发布时间: 2020-08-28 文章热度:153 共2963个字,阅读需8分钟。 手机浏览

正则表达式

  • 1、正则表达式快速上手
    • 1)什么是正则表达式?
      • 概念
        • 正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE)
        • 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑
        • 正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串
      • python正则表达式工具包:re
      • 爬虫中正则表达式的作用是什么?
        • “模糊匹配”
        • requests+BeautifulSoup爬虫逻辑中,在标签识别基础上,匹配里面的信息 → 处理文本内容、提取字段
        • 数据采集后,在pandas中对字段进行处理
      • 示例
        • 【爬虫基础】正则表达式-icbug创客
    • 2)字符匹配
      • re.match(pattern, string, flags=0) → 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none
        • pattern:匹配的正则表达式
        • string:要匹配的字符串。
        • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
      • 返回结果
        • 匹配成功re.match方法返回一个匹配的对象,否则返回None。
        • 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
          • group()/group(0) → 返回成功匹配的内容
          • group(num) → 返回成功匹配的内容中第num个小组的字符
          • groups() → 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号
          • 示例
            • 【爬虫基础】正则表达式-icbug创客
        • 通过span()方法用于以元祖形式返回匹配的起始位置和结束位置
          • span() 返回一个元组包含匹配 (开始,结束) 的位置
          • start() 返回匹配开始的位置
          • end() 返回匹配结束的位置
          • 示例
            • 【爬虫基础】正则表达式-icbug创客
    • 3)修饰符 - 可选标志
      • 概念
        • 正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志
        • 多个标志可以通过按位 OR(|) 它们来指定
      • 修饰符
        • re.I 使匹配对大小写不敏感
        • re.L 做本地化识别(locale-aware)匹配
        • re.M 多行匹配,影响 ^ 和 $
        • re.S 使 . 匹配包括换行在内的所有字符
        • re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
        • re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。
  • 2、正则表达式模式
    • 1)概念与注意点
      • 模式字符串使用特殊的语法来表示一个正则表达式
      • r\'...\' 用在pattern之前,表示单引号中的字符串为原生字符,不会进行任何转义
        • 由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r\'\t\',等价于 \\t )匹配相应的特殊字符
    • 2)常用模式
      • ① 用于匹配位置
        • ^ 匹配字符串的开头
        • $ 匹配字符串的末尾
        • 示例
          • 【爬虫基础】正则表达式-icbug创客
      • ② 用于匹配内容
        • . 匹配除 \n 之外的任何单个字符,要匹配包括 \'\n\' 在内的任何字符,请使用象 \'[\s\S]\' 的模式
        • [...] 用来表示一组字符,单独列出:[amk] 匹配 \'a\',\'m\'或\'k\'
        • [^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符
        • \d 匹配一个数字字符。等价于 [0-9]
        • \D 匹配一个非数字字符。等价于 [^0-9]
        • \s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]
        • \S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]
        • \w 匹配包括下划线的任何单词字符。等价于\'[A-Za-z0-9_]\'
        • \W 匹配任何非单词字符。等价于 \'[^A-Za-z0-9_]\'
        • 示例
          • [Pp]ython 匹配 Python 或 python
          • rub[ye] 匹配 ruby 或 rube
          • [aeiou] 匹配中括号内的任意一个字母
          • [0-9] 匹配任何数字。类似于 [0123456789]
          • [a-z] 匹配任何小写字母
          • [A-Z] 匹配任何大写字母
          • [a-zA-Z0-9] 匹配任何字母及数字
          • [^aeiou] 除了aeiou字母以外的所有字符
          • [^0-9] 匹配除了数字外的字符
      • ③ 用于匹配次数
        • re* 匹配0个或多个的表达式。
        • re+ 匹配1个或多个的表达式。
        • re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
        • re{ n} 匹配n个前面表达式
        • re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
        • 示例
          • 【爬虫基础】正则表达式-icbug创客
      • ④ 用于分组
        • (re) 匹配括号内的表达式,也表示一个组
        • 示例
          • 【爬虫基础】正则表达式-icbug创客
      • ⑤ 贪婪匹配问题
        • 贪婪匹配:尝试匹配尽可能多的字符,默认匹配都是贪婪匹配
        • 非贪婪匹配:尝试匹配尽可能少的字符,用?
        • 示例
          • 【爬虫基础】正则表达式-icbug创客
      • ⑥ 或
        • a| b 匹配a或b
    • 3)附录:所有模式
      • 【爬虫基础】正则表达式-icbug创客
  • 3、字符搜索
    • 1)re.search(pattern, string, flags=0) → 扫描整个字符串并返回第一个成功的匹配
      • 参数
        • pattern:匹配的正则表达式
        • string:要匹配的字符串。
        • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
      • 返回结果 - 和re.match()一致
        • 匹配成功re.match方法返回一个匹配的对象,否则返回None。
        • 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式
        • 通过span()方法用于以元祖形式返回匹配的起始位置和结束位置
      • re.match与re.search的区别
        • re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配
      • 示例
        • 【爬虫基础】正则表达式-icbug创客
    • 2)findall(pattern, string, flags=0) → 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表
      • 参数
        • pattern:匹配的正则表达式
        • string:要匹配的字符串。
        • flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
      • 示例
    • 【爬虫基础】正则表达式-icbug创客
  • 4、字符替换与分割
    • 1)替换
      • re.sub(pattern, repl, string, count=0, flags=0) → 替换字符串中的匹配项
        • pattern : 正则中的模式字符串。
        • repl : 替换的字符串,也可为一个函数。
        • string : 要被查找替换的原始字符串。
        • count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
        • flags : 编译时用的匹配模式,数字形式
      • 示例
        • 相比于replace(),可以模糊匹配字符然后替换
          【爬虫基础】正则表达式-icbug创客
    • 2)分割
      • re.split(pattern, string[, maxsplit=0, flags=0]) → 按照能够匹配的子串将字符串分割后返回列表
        • pattern 匹配的正则表达式
        • string 要匹配的字符串。
        • maxsplit 分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。
        • flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
      • 示例
        【爬虫基础】正则表达式-icbug创客
      • 延伸讲一下,关于提取特殊信息
      • 【爬虫基础】正则表达式-icbug创客
  • 5、爬虫中正则的用处

    • 1)爬虫中的正则练习_1
      • 回顾【爬虫练习项目(一)】中的第一个案例,对于“作者”等字段的提取难度
    • 【爬虫基础】正则表达式-icbug创客

      • 数据采集阶段如何解决?

        • ① 作者/译者等如何提取
        • ② 定价字段怎么提取数字?
        • 【爬虫基础】正则表达式-icbug创客
        • ③ 字符串基本操作,和正则处理如何搭配?
        • 示例
        • 【爬虫基础】正则表达式-icbug创客

        【爬虫基础】正则表达式-icbug创客

    • 2)爬虫中的正则练习_2
      • 回顾【爬虫练习项目(一)】中的第二个案例,对于“其他信息”中的字段匹配
    • 【爬虫基础】正则表达式-icbug创客
      • 采集思路
        • 用正则匹配关键信息
        • 示例
      • 【爬虫基础】正则表达式-icbug创客

常见问题FAQ

本站资源是否全部免费?
本站文章和普通速度下载资源免费,高速下载资源和讲解视频需要成为SVIP才能查看哦!
本站采用标准 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明!
icbug创客 » 【爬虫基础】正则表达式

发表评论

CAPTCHAis initialing...