Python网络爬虫入门笔记 十、正则表达式的概念与其基本使用
一、正则表达式的定义
1、解释
英文:regular expression 简称 regex 或 RE
是用来简洁表达一组字符串的表达式。
例如,若想表示一组字符串,通常只能采用一一列举的方式,很繁琐,但若采用正则表达式,就很简洁:
再比如:
再比如:
2、正则表达式的特征
- 通用的字符串表达框架
- 简洁表达一组字符串的表达式
- 针对字符串表达“简洁”和“特征”思想的工具
- 判断某字符串的特征归属
3、实际作用
文本处理中的作用:
- 表达文本类型的特征(病毒、入侵等)
- 同时查找或替换一组字符串
- 匹配字符串的全部或部分
4、正则表达式的实际使用
在使用正则表达式时,还需要对其进行编译,将符合正则表达式语法的字符串转换成正则表达式特征
二、正则表达式的语法
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 |
特殊: PY{:3}N表示将Y扩展0次到三次
3、经典的正则表达式:
4、实例:匹配IP地址的正则表达式
二、正则表达式的使用、
1、正则表达式的表示类型
re库采用raw string类型表示正则表达式,表示为r'text'
例如:r'[1-9]\d{5}'
- raw string类型(原生字符串类型,即字符串中没有转义符)
- string类型(会更加繁琐,因为要照顾到转义符)
所以综上,当正则表达式中包含转义符时,使用raw string进行表示。
2、常用的re库函数
(1)常用函数
(2)函数参数分析
1)这里先以第一个函数为例:
re.rearch(pattern, string, flags = 0)
- pattern: 正则表达式的字符串或原生字符串表示
- string: 待匹配字符串
- flags: 正则表达式使用时的控制标记有以下几种
- re.I : 忽略正则表达式的大小写,[A-Z]能够匹配小写字母
- re.M : 使正则表达式中的^操作符能够将给定字符串的每行当做匹配开始
- re.S : 使正则表达式中的 . 操作符能够匹配所有字符,因为默认情况 . 匹配除换行符外的所有字符
2)re.match()函数与上一个函数具有相同的参数,但是函数用法稍有不同,这个函数只从字符串开始处进行匹配,一旦字符串开始处匹配不上,就匹配失败。
比如:
此时代码中的match对象就是一个空对象,match调用的方法group(0)是获得匹配后的字符串。
- re.findall()函数也具有相同的函数,但返回的是一个列表类型。
- 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 : 匹配的最大替换次数
如:
此时打印的结果为:
’BIT:zipcode TSU10084‘
3、具体用法
re库一般有两种用法:
函数式用法 和 面向对象的用法
分别适合用于一次性操作 和 编译后的多次操作
比如:
其中re.complie()函数的作用是:将正则表达式的字符串形式编译成正则表达式对象,一共有两个参数为patter 和 flags,含义和前面相同。