python爬虫进阶正则表达式库(Re库)的操作符和函数详解

1 简介

python的正则表达式库即Re库是python的一个标准库,主要用于字符串的匹配。
正则表达式的表示类型:

  • raw string 类型(原生字符串类型),是指不包含转义符(/)的字符串,表示为:r ‘text’ 。
    例如:r’[1-9]\d{5}’
  • string 类型,更加的繁琐。遇到有斜杠的地方必须再增加一条。
    例如:’[1-9]\\d{5}’

2 常用操作符介绍

  • 正则表达式的常用操作符
操作符说明
.表示任何单个字符
[ ]字符集,对单个字符给出取值范围
[^ ]非字符集,对单个字符给出排除范围
*前一个字符零次或无限次扩展
+前一个字符一次或无限次扩展
前一个字符零次或一次扩展
I左右表达式任意一个
{m}扩展前一个字符m次
{m, n}扩展前一个字符m至n次(包含n)
^匹配字符串开头
$匹配字符串结尾
()分组标记,内部只能使用 I 操作符
\d数字,等价于[0-9]之间
\w单词字符,等价于[A-Za-z0-9_]
  • 对应操作符实例
操作符实例
.
[ ][abc],表示a、b、c,[a-z] 表示a到z单个字符
[^ ][^ abc] ,表示非a或b或c的单个字符
*abc* ,表示ab, abc, abcc, abccc等
+abc+, 表示abc, abcc, abccc等
abc?, 表示ab, abc
Iabc I def (字符与竖杠之间无空格,为了区分),表示abc, def
{m}ab{2}c,表示abbc
{m, n}ab{1,2}c, 表示abc,abbc
^^abc,表示abc且在一个字符串的开头
$abc$,表示abc且在一个字符串的结尾
()(abc), 表示abc,(abc I def)表示abc, def
\d
\w

3 Re库主要功能函数

3.1 函数的简单说明

函数说明
re.compile()将正则表达式的字符串形式编译成正则表达式对象
re.search()在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象
re.match()从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall()搜索字符串,以列表类型返回全部能匹配的子串
re.split()将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
re.finditer()搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub()在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

3.2 函数参数介绍

regex = re.compile(pattern, flags=0)
  • Re库的一种等价用法
  • 可调用其他六种功能函数,例如:regex.search()等
  • pattern: 正则表达式的字符串或原生字符串表示
  • flags: 正则表达式使用时的控制标记
re.search(pattern, string, flags=0)
  • pattern: 正则表达式的字符串或原生字符串表示
  • string: 待匹配字符串
  • flags: 正则表达式使用时的控制标记
re.mstch(pattern, string, flags=0)
  • 参数同上
re.findall(pattern, string, flags=0)
  • 参数同上
re.split(pattern, string, maxsplit=0, flags=0)
  • maxsplit: 最大分割数,剩余部分作为最后一个元素输出
  • 其他参数同上
re.finditer(pattern, string, flags=0)
  • 参数同上
re.finditer(pattern, repl, string, count=0, flags=0)
  • repl: 替换匹配字符串的字符串
  • count:匹配的最大替换次数
  • 其他同上

3.3 flags使用时控制标记的常用标记

常用标记说明
re.I re.IGNORECASE忽略正则表达式的大小写,[A-Z]能够匹配小写字符
re.M re.MULTILINE正则表达式中的^操作符能够将给定的字符串的每一行当作匹配开始
re.S re.DOTALL正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

4 返回Match对象的详细介绍

  • Match对象的属性
属性说明
.string待匹配的文本
.re匹配时使用的pattern对象
.pos正则表达式搜索文本的开始位置
.endpos正则表达式搜索文本的结束位置
.group(0)获得匹配后的字符串
.start()匹配字符串在原始字符串的开始位置
.end()匹配字符串在原始支付查的结束位置
.span()返回元组类型的(.start(), .end())

5 贪婪匹配与最小匹配

5.1 贪婪匹配

  • Re库默认采用贪婪匹配,即输出匹配最长的子串。
import re

match = re.search(r'A.*D', 'ABCDBBBCCDCS')
print(match.group(0))

在这里用.group(0)返回匹配正则表达式的结果
在这里插入图片描述

5.2 最小匹配

  • 最小匹配操作符
操作符说明
*?前一个字符0次或无限次扩展
+?前一个字符1次或无限次扩展
??前一个字符0次或1次扩展
{m, n}?扩展前一个字符m至n次(包含n次)
  • 例如:只需将上例中*后加一个?即可。
import re

match = re.search(r'A.*?D', 'ABCDBBBCCDCS')
print(match.group(0))

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值