python爬虫进阶系列一 :正则表达式

python爬虫进阶系列一 正则表达式概述原子元字符模式修正贪婪模式和懒惰模式re库match()search()compile()&findall()sub()
由于爬虫的学习之路还远没有结束,所以推出新的系列——爬虫进阶,希望大家多多支持!

概述

什么是正则表达式呢?简单来说就是描述字符串排列的一系列规则。正则表达式主要用于字符串的匹配,在搜索特定信息时,正则表达式就能大显神通了。在python库中我们需要导入re库来实现正则表达式的功能

原子

原子是正则表达式最基本的组成单位,伟哥正则表达式中必须包含至少一个原子,原子一般包括下面几类:

普通字符 : 包括数字,大小写字母,下划线
非打印字符 : 用于控制格式的字符,如“\n”
通用字符 : 即一个原子可以匹配一类字符,大致有以下几种:

\w 匹配任意一个数字,字母和下划线
\W 匹配除数字,字母,下划线以外的任意字符
\d 匹配一个十进制数
\D 匹配除十进制数以外的任意字符
\s 匹配任意一个空白字符
\S 匹配除空白字符以外的任意字符

相信大家已经找到规律了!是的我们只需要记住小写通用字符代表的含义,那么它对应的大写字符就是取反

原子表: 使用原子表来定义一组原子,匹配时只需要满足任意一个存在于原子表中的原子即可,我们使用中括号[ ] 来表示原子表,比如[xyz]就是匹配x, y, z中任意一个字符

元字符

正则表达式中具有特殊含义的字符,常用的有下面几种

. 匹配除换行符\n以外的任意字符
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
* 匹配0次,1或多次前面的原子
? 匹配0次,或1次前面的原子
+ 匹配1次,或多次前面的原子
{n} 前面的原子恰好出现n次
{n,} 前面的原子至少出现n次
{n,m} 前面的原子至少出现n次,最多出现m次
| 模式选择
() 模式单元

下面我们举一些例子来说明这些元字符的用法

".python."
匹配前后是一个除换行符以外的任意字符的,中间是python的字符串

"^abc"
匹配开头是abc的字符串(注意这里返回的只有abc)

"de$"
匹配结尾为de的字符串(返回的只有de)

"py.*n"
匹配开头为py,结尾为n中间为除了换行符外的任意数量的任意字符的字符串
比如python

"py.{3,}n"
匹配开头为py, 结尾为n中间至少包含三个不是换行符的任意字符,比如python

"[abc].{2}f|abc.*f"
模式选择符|
匹配前后两个模式中的一个

"(cd){1,}"
模式单元符,将小括号中的视为整体(视为一个大原子)
所以上面匹配至少一个cd(连在一起的)的字符串

模式修正

通过不改变正则表达式的情况下,通过模式修正符来使正则表达式更高匹配更多,常用的如下:

I 匹配忽略大小写
M 多行匹配
L 本地化识别匹配
U 根据UNICODE字符来解析字符
S 让.匹配任意字符

模式修正需要结合re一起使用

import re
pattern = "python"
string = "asdfpyTHon_dd"
result = re.search(pattern, string, re.I)
print(result)

这里我们导入re库,使用search来匹配字符串

这里三个参数,第一个是匹配的模式——也是就正则表达式;第二个参数是匹配的字符串;第三个是模式修正

贪婪模式和懒惰模式

从名字也可以看出,贪婪模式就是尽可能多匹配, 懒惰模式就是尽量少匹配

一般我们想要在某些字符中匹配任意的字符,我们使用“.*”这时默认使用贪婪模式, 转化为懒惰模式只需要后面加?即可

re库

这里简单介绍几个re库中常用的函数

match()

函数原型:

match(pattern, string, flag)

前两个参数是匹配的模式和字符串,最后一个是可选选项可以填上模式修改

import re
string = 'pYthondd'
pattern = 'python.'
res = re.match(pattern, string, re.I)
print(res)

输出结果:

<re.Match object; span=(0, 7), match='pYthond'>

注意match只会从头开始匹配!!!

如果改成这样:

string = 'apYthondd'

match将返回None

search()

如果我们想要在全文匹配字符串怎么办呢?我们可以使用search,具体用法跟match一样

import re
string = 'adcpYthondd'
pattern = 'python.'
res = re.search(pattern, string, re.I)
print(res)

输出结果:

<re.Match object; span=(2, 9), match='pYthond'>

compile()&findall()

这里又出现一个问题,search无法匹配多个该模式的字符串

所以我们使用find_all

string = 'ddpYthonddpythonad'
pattern = 'python.'
res = re.compile(pattern, re.I).findall(string)
print(res)

我们首先使用compile进行预编译,也就是确定匹配模式, 再使用find all来查找字符串中所有符合正则表达式的字符串

输出结果:

['pYthond', 'pythona']
# 以列表的形式返回

sub()

如果我们想要根据正则表达式来实现替换字符串的功能,我们使用sub()函数

我们先来看看函数模型

re.sub(pattern, rep, string, max)

第一个参数还是匹配模式,也就是正则表达式;第二个参数是需要替换的字符串; 第三个是总的字符串;最后一个参数是最大的替换次数

string = 'ddpythonddpythonad'
pattern = 'python.'
res = re.sub(pattern, 'aaa', string, 1)
print(res)

输出结果:

ddaaadpythonad

返回替换后的字符串,由于限制了替换次数,所以后面一个符合的字符串段没有替换

以上就是正则表达式的全部内容啦!觉得有点收获的不要忘了点赞收藏哟❤

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

python爬虫进阶系列一 :正则表达式

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » python爬虫进阶系列一 :正则表达式
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏