Python网络爬虫之正则表达式(一)

当我们已经获取到一个完整的页面HTML内容时,如何从这些杂乱的内容中锁定并提取出我们所需要的内容那?这就要用到一个十分强大的工具:正则表达式。


初识正则表达式


正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。


正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大。得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现支持的语法数量不同;但不用担心,不被支持的语法通常是不常用的部分。如果已经在其他语言里使用过正则表达式,只需要简单看一看就可以上手了。


正则表达式的大致匹配过程是:1.依次拿出表达式和文本中的字符比较,2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。3.如果表达式中有量词或边界,这个过程会稍微有一些不同。


正则表达式规则


下面是Python语言中正则表达式的元字符和匹配语法:


数量词的贪婪模式与非贪婪模式


正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式”ab*”如果用于查找”abbbc”,将找到”abbb”。而如果使用非贪婪的数量词”ab*?”,将找到”a”。


注:我们一般使用非贪婪模式来提取网页内容。


反斜杠问题


与大多数编程语言相同,正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\\\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。


Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\\”表示。同样,匹配一个数字的”\\d”可以写成r”\d”。有了原生字符串,表达式也更加直观了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文译自 制作正则引擎的作者 Jan Goyvaerts 为工具 RegexBuddy 写的教程版权归原作者所有注...
    极客圈阅读 3,313评论 0 25
  • 在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开...
    AromaMuzi阅读 316评论 0 0
  • 正则表达式(regular expression)是一种可以在许多现代应用程序和编程语言中使用的特殊形式的代码模式...
    Android轮子哥阅读 11,624评论 4 16
  • 正则表达式学习笔记 一篇记录了学习正则表达式的笔记。 1. 转义字符 在 HTMl 中转义字符以 & 符号开头,分...
    heyi_let阅读 428评论 0 0
  • 七绝《荷仙》 因何龙女下凡尘? 彩雾轻云绕丽身。 必是贪食人世馔, 喜蝶爱鸟退金鳞。 2019.12.08轻风
    云淡风轻客阅读 785评论 0 2