Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

一、正则表达式的定义

1、解释

英文:regular expression 简称 regex 或 RE

是用来简洁表达一组字符串的表达式。

 

例如,若想表示一组字符串,通常只能采用一一列举的方式,很繁琐,但若采用正则表达式,就很简洁:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

再比如:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

再比如:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

2、正则表达式的特征

  • 通用的字符串表达框架
  • 简洁表达一组字符串的表达式
  • 针对字符串表达“简洁”和“特征”思想的工具
  • 判断某字符串的特征归属

 

3、实际作用

 文本处理中的作用:

  • 表达文本类型的特征(病毒、入侵等)
  • 同时查找或替换一组字符串
  • 匹配字符串的全部或部分

 

4、正则表达式的实际使用

在使用正则表达式时,还需要对其进行编译,将符合正则表达式语法的字符串转换成正则表达式特征

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

二、正则表达式的语法

1、正则表达式的组成

正则表达式由字符操作符组成。

 

2、正则表达式常用的操作符

操作符

说明

实例

.

表示单个字符

 

[]

字符集,对单个字符给出取值范围

[abc]表示a、b、c,[a-z]表示a到z单个字符

[^]

非字符集,对单个字符给出排除范围

[^abc]表示非a或b或c的单个字符

*

前一个字符0次或无限次扩展

abc*表示ab、abc、abcc、abccc等

+

前一个字符1次或无限次扩展

abc+表示abc、abcc、abccc等

前一个字符0次或1次扩展

abc?表示ab、abc

|

左右表达式任意一个

abc|def 表示abc、def

 

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

特殊:   PY{:3}N表示将Y扩展0次到三次

3、经典的正则表达式:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

4、实例:匹配IP地址的正则表达式

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

二、正则表达式的使用、

 

1、正则表达式的表示类型

re库采用raw string类型表示正则表达式,表示为r'text'

例如:r'[1-9]\d{5}'

  • raw string类型(原生字符串类型,即字符串中没有转义符)
  • string类型(会更加繁琐,因为要照顾到转义符)

所以综上,当正则表达式中包含转义符时,使用raw string进行表示。

 

2、常用的re库函数

 

(1)常用函数

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

 

(2)函数参数分析

1)这里先以第一个函数为例:

re.rearch(pattern, string, flags = 0)

  • pattern: 正则表达式的字符串或原生字符串表示
  • string: 待匹配字符串
  • flags: 正则表达式使用时的控制标记有以下几种
    • re.I : 忽略正则表达式的大小写,[A-Z]能够匹配小写字母
    • re.M : 使正则表达式中的^操作符能够将给定字符串的每行当做匹配开始
    • re.S : 使正则表达式中的 . 操作符能够匹配所有字符,因为默认情况 . 匹配除换行符外的所有字符

 

2)re.match()函数与上一个函数具有相同的参数,但是函数用法稍有不同,这个函数只从字符串开始处进行匹配,一旦字符串开始处匹配不上,就匹配失败。

比如:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

此时代码中的match对象就是一个空对象,match调用的方法group(0)是获得匹配后的字符串。

 

  1. re.findall()函数也具有相同的函数,但返回的是一个列表类型。

 

  1. re.split(pattern, string, maxsplit = 0, flags = 0)

这里多了一个参数maxsplit : 最大分隔数,剩余部分作为最后一个元素输出

 

5)re.finditer()参数与前三个函数的参数相同,不过这个函数返回的是一个迭代类型,每个迭代元素是match对象,一般用于循环当中。获取每次匹配的match对象,并对这个对象单独处理。

 

6)re.sub(pattern, repl, string, count = 0, flags = 0)

参数一共由五个,其中的三个前面已知,剩下的两个参数如下:

  • repl : 替换匹配字符串的字符串
  • count : 匹配的最大替换次数

如:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

此时打印的结果为:

’BIT:zipcode TSU10084‘

 

3、具体用法

re库一般有两种用法:

函数式用法 和 面向对象的用法

分别适合用于一次性操作 和 编译后的多次操作

比如:

Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用

其中re.complie()函数的作用是:将正则表达式的字符串形式编译成正则表达式对象,一共有两个参数为patter 和 flags,含义和前面相同。