爬虫学习(3)—关于正则表达的一行胜千言

北理工嵩天Python网络爬虫与信息提取MOOC 测验3: Python网络爬虫之实战 (第3周) Python网络爬虫与信息提取MOOC 测验3: Python网络爬虫之实战 (第3周) 1、以下不是正则表达式优势的选项是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ A、一行胜千言 B、实现自动化脚本 C、特征表达 D、简洁 正确答案... 阅读详情

正则表达式是我们进行项目开发经常使用的一组表达式。比如如何判断用户姓名是否正确,邮箱格式是否符合规则正则表达式就是很好的处理方式。

同样的,爬虫也能够使用正则表达式。也就是说,表达式的出现就是为了能够简洁。

1、正则表达式的一行胜千言

1.1 如何胜千言

比如我们要表达以下内容:

'PY'
'PYY'
'PYYY'
'PYYYY'
'PYYYYY'
...

此时我们如何在我们的输出项表达如上的内容呢?

正则表达式表示如下:

PY+

这句话的意思在于是表达以‘PY’开头,后面表示的一个或者无穷个Y。

再看看如下举例:我们要设计一个以‘PY’开头,后续存在不多于10个字符,后续字符不能是P或者Y。

PY[^PY]{0,10}

总之,正则表达式是一种很有意思的语言,是一个通用的字符串表达框架,能够表达一种易理解,将目标字符以简洁化的工具。

1.2 具体实际

正则表达式库可以应用在很多方面。

  • 表达文本类型的特征,这种实际应用可以发现病毒或者入侵文件等等
  • 查找或替换一组字符串
  • 匹配字符的全部或者部分内容

我们可以看到,我们使用正则表达式的框架语法在于是对目标字符的简洁化处理。

2、正则表达式语法

正则表达式是由字符和操作符组成:

操作符说明实例
.表示任何单个字符
[]字符集,对单个字符给出范围限定如[abc]表示a、b、c,[a-z]表示从a到z
[^ ]非字符集,就是对单个字符给出排除范围[^abc]就是非a或者非b或者非c
*前一个字符0次或者无限次扩展abc*认为ab、abc、abcc
+前一个字符1次或者无限次扩展abc+认为abc、abcc
?前一个字符0次或者1次扩展abc?认为ab、abc
|左右表达式任意一个abc|def表示abc、def

除此之外,我们还有以下表达的经典正则表达式:

^[A-Za-z]+$  由26个字母组成的字符串。这里注意,此时的^应该是异或符号
^[A-Za-z0-9]+$  由26个字母和数字组成的字符串
^-?\d+$ 这个是整数形式的字符串。注意,这里的负号是可以取的,所以后面加上?意思在于可以是负数
^[0-9]*[1-9][0-9]*$ 正整数的字符串形式
[1-9]\d{5}  中国境内邮政编码,为6位(1-9加上后面的5位数)

再进一步来,我们来用正则表达式来匹配ip地址:

首先格式如下:
\d+.\d+.\d+.\d+  这种就是根据格式划分
\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}  这是根据数值
以上都是不精确的匹配值。下面再看:
我们将0-99表示如下:[1-9]?\d
100-199表示如下:1\d{2}
200-249表示如下:2[0-4]\d
250-255表示如下:25[0-5]
四种取或并整合如下:
(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5])

3、Re库的使用

Re库主要是字符串的匹配,调用方法很简单,即import re。

3.1 Re库的表示类型

其中首先介绍其表示类型:

re库采用的是raw String类型表示正则表达式,表示为:r’text’

比如如下:

r'[1-9]\d{5}'  表达邮政编码

原生字符串是不包括斜杠(转义符),不将其编译。因为在基本的String类型时,我们要额外添加\以转义。

3.2 Re库的功能函数

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

3.3 Re库主要属性

这里以re.search(pattern,string,flags=0)为例子:

这个方法中三个参数中,前两个顾翻译思意也能明白其中大致。

pattern意思是正则表达式的字符串或者原生字符串表示,

string是待匹配字符串,

我们主要讲flags,即正则表达式的使用标记。

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

3.4 Re库调用的方式

在使用Re库进行字符操作时,我们可以通过下面的函数来完成面向对象的调用。

regex = re.compile(pattern,flags=0)

此时的regex才是正则表达式的对象,我们就可以使用regex对象调用其方法。方法就是前面的函数内容。当然此时我们已经给对象赋予pattern,所以后续的函数调用只需要写入要改变的String字符即可。

4、match对象

match对象在前面的函数方法都会被返回。即很多函数的返回就是一个match对象。那么理解match对象就显得比较重要。

4.1 match对象的属性和方法

属性说明
.string待匹配的文本
.re匹配时使用的pattern对象
.pos正则表达式搜索文本的开始位置
.endpos正则表达式搜索文本的结束位置

就是我们通常写的实体类或者是结构体一样,我们会在这个对象中赋予上面四个内容以标记一个match对象内部的数据。

然后我们再了解该对象的方法。

方法说明
.group(0)获得匹配后的字符串
.start()匹配字符串在原始字符串的开始位置
.end()匹配字符串在原始字符串的结束位置
.span()返回(.start,.end)

5、Re库的贪婪匹配和最小匹配

这个地方就是实际查找的字符中会遇到的问题。在一个很大的文本中我们会遇到符合正则表达式格式的字符串,那么我们要匹配哪些内容呢?

其中Re默认是采用最长的子串,就是贪婪匹配。

当然我们也会找最小的内容,那么我们可以记住下面的内容:

操作符说明
*?前一个字符0次或者无限次扩展,最小匹配
+?前一个字符1次或者无限次扩展,最小匹配
??前一个字符0次或者1次扩展,最小匹配
{m,n}?扩展前一个字符m到n此,最小匹配

我们通常实现最小匹配,就在我们需要辨认的地方增添一个?即可。

总结

正则表达式是表达一组简单的字符串的一种规则,是一种简洁字符串表示的框架。

我们在使用Re中需要先使用Compile方法生成一个正则表达式对象,我们才能够使用后续的方法。

其中在正则对象使用的方法中我们要了解match对象的内容,它就是一个简单的包括属性和方法的结构体或者实体类。

并且最后在进行字符匹配能够掌握贪婪和最小匹配的方法

Python 网络爬虫与信息提取(第三周) Python网络爬虫之实战 (第3周) 1.Beautiful Soup库与re库之间关系,描述正确的是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ A 这两个库没有关系 B re库中可以加载Beautiful Soup库 C re库能实现HTML解析,功能上与Beautiful ... 阅读详情

相关推荐

FPGA新手必看:Create HDL Wrapper和Generating Output Products到底该先用哪个?

本文深入解析了FPGA设计中Create HDL Wrapper与Generating Output Products的正确使用顺序,帮助新手避免常见错误。详细介绍了两者的功能差异、执行顺序的底层逻辑以及工程管理的最佳实践,特别适合使用Vivado进行FPGA开发的初学者。

xk7n92h3p5m的博客 1065

正则表达式

符号 ^指向一行的开头 $指向一行的结尾 .表示le

qin_huang的专栏 686

信创环境下,软件测试如何破局?

毕竟,在自主可控的道路上,每一行通过测试的代码,都在为信创产业的未来添砖加瓦。未来,测试工程师不仅要验证软件在信创环境的可用性,更要基于国产软硬件的特性,推动软件进行 “原生设计”—— 例如,针对国产 CPU 的多核架构优化代码,基于国产数据库的索引机制提升查询效率。某政务云平台的测试数据显示,在 “飞腾芯片 + 麒麟操作系统” 环境下,系统的并发处理能力较传统环境下降约 15%,测试团队通过优化软件的线程调度逻辑,最终将性能损失控制在 5% 以内 —— 这正是信创性能测试的价值所在。

weixin_45608163的博客 885

深入浅出之正则表达式(一)

深入浅出之正则表达式(一)转自源文:http://dragon.cnblogs.com/archive/2006/05/08/394078.html 1.      什么是正则表达式基本说来,正则表达式是一种用来描述一定数量文本的模式。Regex代表Regular Express。本文将用>来表示一段具体的正则表达式。一段文本就是最基本的模式,简单的匹配相同的文本。

大熊日志 2023

数电实训:万年历

万年历

Lmyccq的博客 1万+

Python OpenCV基于颜色通道分离法去除图片中的红色印章

最近一段时间的工作都是研究如何去除图片中的红色印章,在网上查找了大量的大佬写过的方法,发现大多数是采取颜色通道分离法来做,并且效果还不错。站在前人的肩膀上,我又做了些许调整,谈不上是改进,但是能应对更对的情况总还是好的,特此记录。 拿发票做例子,印章相较于其它部分最大的不同就是印章是红色的,而其它部分不是(这是一句废话)。 那么第一步当然就是将红色分离出来,这一步可以采用Python第三方库OpenCV里的 cv2.split()方法,该方法是把RGB图像的三个通道拆分开来,得...

wl_Honest的博客 1万+

正则表达式的使用

什么是正则表达式 正则表达式是用字符序列来描述复杂查询条件的方式。 匹配所有的数字 ^[0-9]+$ 表达式说明: * ^ - 表示一行的开始 * [0-9] - 匹配介于0-9中间的任何数字;也可以用\d来代替 * + - 匹配前面表达式的一个或者多个实例 * $ - 表示一行的结束 不同语言实现正则表达式 C#语言下实现 using System; u...

GIser_Javy 440

rockchip rk3566 android11 网口log报错: DMA engine initialization failed

问题描述:上电初始化前将网口插入,然后上电初始化网口能够正常使用,且能够找到PHY,ifconfig 查看能够有eth0 产生,网口正常使用且能够热插拔,但上电初始化时,不插入网口,就会报DMA engine initialization failed 错误,DMA 初始化的时候出错了。 分析:一般产生这个问题可以认为是GMAC 的工作时钟出问题了。先测量时钟引脚是否有时钟,时钟频率以及幅度等指标是否正常,主要确认以下几个方面: 1.IOMUX 出错,检查时钟脚寄存器值是否正确。 2.时钟方向以及配置

qq_48709036的博客 2万+

正则表达式匹配单行、多行注释思路详解

我的需求是用new Function去执行一段javascript代码,怕代码一多,注释会影响效率,因此我需要寻找字符串的所有类型的注释,将其全部替换为空字符串。

qq_55188913的博客 5988

算法 | A*算法实现最优路径规划

启发式探索是利用问题拥有的启发信息来引导搜索,达到减少探索范围、降低问题复杂度的目的。A*寻路算法是启发式探索的一个典型实践,在寻路搜索的过程中,给每个节点绑定了一个估计值(即启发式),在对节点的遍历过程中采取估计值优先原则,估计值更优的节点会被优先遍历。...

不断学习,不断进步,提高自己 6630

YOLOv26详解 | 一文带你从代码角度深入理解ultralytics最新作品yolov26的创新 | 训练、推理、验证、导出 (附网络结构图PPT可用,全网最全)

YOLOv26带来多项创新:1)采用双检测头机制(One-to-Many和One-to-One)实现端到端无NMS推理;2)移除DFL简化边界框回归;3)引入ProgLoss+STAL优化小目标检测;4)使用MuSGD优化器提升训练稳定性。网络结构方面,SPPF模块增加shortcut连接,并在C3k2中引入PSABlock注意力机制。该版本更注重实际部署,简化了推理流程,提升硬件兼容性。教程涵盖模型训练、验证、推理及导出全流程,支持多种格式转换如ONNX、TensorRT等,适合工业应用场景。

Snu77的博客 4064

爬虫快速上手之正则表达式总结

目录 一、正则表达式 二、查找相关方法 三、re.Match类的使用 四、re.compile()方法的使用 五、正则修饰符 六、标点符号的特殊意义 七、字母的特殊含义 八、正则替换 九、贪婪模式和非贪婪模式 十、正则表达式小结 一、正则表达式 1、概念 正则表达式是一个特殊的字符序列,通常被用来检索、替换那些符合某个模式(规则)的文本; 在python中需要通过正则表达式对字符串进行匹配的时候,可以使用re模块实现全部的正则表达式功能; 2、特点 灵活性...

Athena的博客 476

【PCB专题】Allegro导出3D文件

Allegro中如何导出3D文件,有没有一键导出操作?

一点硬件 4987

Python网络爬虫与信息提取第三周测验答案

测验3: Python网络爬虫之实战 (第3周) 1. 以下不是正则表达式优势的选项是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ A 一行胜千言 B 特征表达 C 实现自动化脚本 D 简洁 正确答案 C 尽管正则表达式可用于自动化脚本,但不直...

Divine0的博客 4813

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

学习Python的第三天之网络爬虫

30岁程序员学习Python的第三天之网络爬虫——正则表达式。

注释写满人生 839

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之实战(第3周)

MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之实战 21.08.03 目录 文章目录网络爬虫之实战 21.08.03目录单元7:Re(正则表达式)库入门7.1 正则表达式的概念7.2 正则表达式的语法7.3 Re库的基本使用7.3.1 正则表达式的表示类型7.3.2 Re库主要功能函数7.3.3 Re库主要功能函数(详解)7.3.4 Re库的等价用法7.4 Re库的match对象7.4.1 Match对象的属性7.4.1 Match对象的方法7.5 Re库的贪婪匹配和最小匹配单元8

小朱.小猪的博客 331

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

爬虫第三课:正则表达式

Regular expression 正则表达式 正则表达式可以非常简洁的表达一组很长字符串的特征,所以把正则表达说成一行胜千言。 可以把一组字符串的特征或特点表达出来。 比如说有一组字符串: 无穷多个以L开头后面有一个或无穷多个H字符串。 ‘LH’ ‘LHH’ ‘LHHH’ … ‘LHHHHHHH…’ 正则表达式: LH+ ‘PY’开头,后续存在不多于10个字符,后续字符不能是‘P’或‘...

认真写的博客 6527

【MOOC】Python网络爬虫与信息提取-北京理工大学-part 3

【第三周】网络爬虫之实战一、Re(正则表达式)库入门1.正则表达式的概念正则表达式是什么正则表达式是用来简洁表达一组字符串的表达式。 使用正则表达式的优势就是:简洁、一行胜千言 一行就是特征(模式)例1:代表一组字符串: 例2:代表一组(无穷个)字符串: 例3:代表一组具有某种特点但是枚举起来很繁琐的字符串: 简单来说: 正则表达式是用来简洁表达一组字符串的表达式 正则表达式是一

linzch3的博客 7832

爬虫0基础第4天:正则表达式库

Re库是Python的标准库,主要用于字符串匹配调用方式:import re。

2402_84235386的博客 1438

Python网络爬虫与信息提取笔记07-Re(正则表达式)库入门

Python网络爬虫与信息提取笔记01-Requests库入门 Python网络爬虫与信息提取笔记02-网络爬虫之“盗亦有道” Python网络爬虫与信息提取笔记03-Requests库网络爬虫实战(5个实例) Python网络爬虫与信息提取笔记04-Beautiful Soup库入门 Python网络爬虫与信息提取笔记05-信息组织与提取方法 Python网络爬虫与信息提取笔记06-实...

MARS_098的博客 733

【Python爬虫学习】五、正则表达式

正则表达式的优势 简洁,可以很简洁的表达一组字符串的特征,一行胜千言,主要用于字符串匹配 正则表达式的使用 编译:将符合正则表达式语法的字符串转换成正则表达式特征 编译后的特征与一组字符串是对应的,而编译前的只是一个符合正则表达式语法的单一字符串,并不是真正意义上的正则表达式 正则表达式的语法 正则表达式的语法是由字符和操作符构成 操作符: 注意,\w表示A-Z,a-z...

Guanhai1617的博客 392

python第三周小测验a答案_Python网络爬虫与信息提取第三周测验答案

测验3: Python网络爬虫之实战 (第3周)1. 以下不是正则表达式优势的选项是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬A 一行胜千言B 特征表达C 实现自动化脚本D 简洁正确答案 C尽管正则表达式可用于自动化脚本,但不直接体现自动脚本的作用...

weixin_39660931的博客 632

爬虫学习——正则表达式与python的re库使用(一)

正则表达式 总结自北理工网络公开课《Python网络爬虫与信息提取》http://open.163.com/movie/2019/5/8/I/MEEMCM1NP_MEEU4DG8I.html 第二篇总结见https://blog.youkuaiyun.com/weixin_42412973/article/details/98662359 一、正则表达式的概念 用来简洁表达一组字符串的表达式 例如: '...

我就是这样的自己的博客 681

爬虫第三讲:正则表达式库

本文介绍了正则表达式以及python的 re 模块,并通过实例讲解了re模块的各种方法

m0_61638092的博客 340

python爬取淘宝商品信息以及正则表达式

正则表达式 1.正则表达式:用来简洁表达一组字符串的表达式; 2.一行胜千言 3.‘PY’开头,后续存在不多于10个字符,后续字符不能是‘P’或者‘Y’; 4.通用字符串表达框架 5.简洁表达一组字符串的表达式; 6.针对字符串表达“简洁”和“特征”思想的工具; 7.判断某字符串的特征归属; 8.正则表达式的作用: (1)表达文本类型的特征; (2)同时查找或替换一组字符串; (3)匹配字符串的全部或部分; 9.正则表达式的语法:正则表达式由字符和操作符构成; Re库 1.Re库是python的标准库,主要

qq_44176343的博客 2213

【爬虫】6基础Python网络爬虫——Re库(MOOC学习笔记)

网络爬虫实战1、入门Re(正则表达式库)(1)正则表达式的概念(2)正则表达式的语法(3)Re库的基本使用re.searchre.matchre.findallre.splitre.finditerre.subRe库的另一种等价用法(4)Re库的Match对象(5)Re库的贪婪匹配和最小匹配小结 1、入门Re(正则表达式库) Re正则表达式详解——提取页面关键信息 (1)正则表达式的概念 正则表达式:regular expression, regex, RE,是用来简洁表达一组字符串的表达式,例如: 一组

YoungSeng's Blog 676
上一篇: 网络编程的提取解析(2)——BeautifulSoup
下一篇: JavaSE(1)Java简述与环境搭建
Xiao艾扶
博客等级 码龄7年 187粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值