数据爬虫(四):爬虫正则表达式详解

本文详细介绍了正则表达式的基本概念、语法规则和相关注解,特别是数量词的贪婪与非贪婪模式及反斜杠问题。重点讲解了Python的re模块,包括re.compile、re.match、re.search、re.split、re.findall、re.finditer、re.sub和re.subn等函数的使用,并通过实例展示了它们的功能和操作。
摘要由CSDN通过智能技术生成

一、正则表达式

百科:正则表达式,又称规则表达式(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

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

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

二、正则表达式的语法规则

 

三、正则表达式相关注解

(1)数量词的贪婪模式与非贪婪模式

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

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

(2)反斜杠问题

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

Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r”\\”表示。同样,匹配一个数字的”\\d”可以写成r”\d”。有了原生字符串,妈妈也不用担心是不是漏写了反斜杠,写出来的表达式也更直观勒。

四、相关模块及函数

(一)、Re模块

Python 自带了re模块,它提供了对正则表达式的支持。主要用到的方法列举如下

 
1
2
3
4
5
6
7
8
9
10
#返回pattern对象
re . compile ( string [ , flag ] )
#以下为匹配所用函数
re . match ( pattern , string [ , flags ] )
re . search ( pattern , string [ , flags ] )
re . split ( pattern , string [ , maxsplit ] )
re . findall ( pattern , string [ , flags ] )
re . finditer ( pattern , string [ , flags ] )
re . sub ( pattern , repl , string [ , count ] )
re . subn ( pattern , repl , string [ , count ] )

介绍一下pattern的概念,pattern可以理解为一个匹配模式,那么我们怎么获得这个匹配模式呢?很简单,我们需要利用re.compile方法就可以。

 
1
pattern = re . compile (r 'hello' )

在参数中我们传入了原生字符串对象,通过compile方法编译生成一个pattern对象,然后我们利用这个对象来进行进一步的匹配。

另外大家可能注意到了另一个参数 flags,在这里解释一下这个参数的含义:

参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。

可选值有:

 
1
2
3
4
5
6
re . I (全拼: IGNORECASE ) : 忽略大小写(括号内是完整写法,下同)
re . M (全拼: MULTILINE ) : 多行模式,改变 '^''$'的行为
re . S (全拼: DOTALL ) : 点任意匹配模式,改变 '.'的行为
re . L (全拼: LOCALE ) : 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
re . U (全拼: UNICODE ) : 使预定字符类 \w
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值