『python爬虫』06. 数据解析之re正则解析(保姆级图文)

news2024/12/23 16:17:05

目录

    • 1. 什么是re解析
    • 2. 正则规则
      • 元字符
      • 量词
      • 匹配模式测试
    • 3. 正则案例
    • 4. re模块的使用
      • 4.1 findall: 匹配字符串中所有的符合正则的内容
      • 4.2 finditer: 匹配字符串中所有的内容[返回的是迭代器]
      • 4.3 search, 找到一个结果就返回, 返回的结果是match对象
      • 4.4 match 从头开始匹配,必须把10086放在待匹配的字符串开头才能匹配成功
      • 4.5 compile 预加载正则表达式
      • 4.6 (?P<变量名>匹配规则)
    • 5. 综合实战
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

1. 什么是re解析

Regular Expression, 正则表达式, ⼀种使⽤表达式的⽅式对字符串,进⾏匹配的语法规则(按照一定规则的查找)

⽹⻚源代码本质上就是⼀个超⻓的字符串, 用正则就好像是在我们的txt中查找指定内容一样。

正则的优点:速度快, 效率⾼, 准确性⾼
正则的缺点:难度⾼


2. 正则规则

元字符

元字符: 具有固定含义的特殊符号 常⽤元字符

1	.   匹配除换⾏符以外的任意字符
2	\w	匹配字⺟或数字或下划线
3	\s	匹配任意的空⽩符
4	\d	匹配数字
 
5	\n	匹配⼀个换⾏符
6	\t	匹配⼀个制表符
7		
8	^	匹配字符串的开始
9	$	匹配字符串的结尾
10		
11	\W	匹配⾮字⺟或数字或下划线
12	\D	匹配⾮数字
13	\S	匹配⾮空⽩符
14	a|b	匹配字符a或字符b
15	()	匹配括号内的表达式,也表示⼀个组
16	[...]	匹配字符组中的字符
17	[^...]	匹配除了字符组中字符的所有字符

量词

1	*	重复零次或更多次
2	+	重复⼀次或更多次
3	?	重复零次或⼀次
4	{n}	重复n次
5	{n,}	重复n次或更多次
6	{n,m}	重复n到m次

匹配模式测试

符号意义
.*惰性匹配
.*?贪婪匹配

爬⾍⽤的最多的就是这个惰性匹配.,就是尽可能减少所搜索到的目标(搜索会更加精确,用到了回溯的思想)


3. 正则案例

正则在线测试网站:https://tool.oschina.net/regex/

  • 案例1:

待匹配文本:

惰性正则匹配,123456匹配

匹配规则匹配的内容–>惰性(任意一个字符)匹配

惰性.匹配

匹配结果:无匹配项

  • 案例2
    待匹配文本:
惰性正则匹配,123456匹配

匹配规则匹配的内容–>惰性(任意多个个字符)匹配

惰性.*匹配

在这里插入图片描述

  • 案例3
    待匹配文本:
惰性正则匹配,123456匹配

匹配规则匹配的内容–>惰性(任意多个个字符)匹配,要求找到最小范围的匹配项

惰性.*?匹配

原理在于第一步找到了案例2中的 惰性正则匹配,123456匹配字符串之后继续对这个字符串回溯,查看这个字符串中是否能够再找到更小单位的匹配对象,只返回最小长度的匹配对象。
在这里插入图片描述


4. re模块的使用

匹配规则解释: “\d” 表示匹配数字 “+” 表示1个或多个

4.1 findall: 匹配字符串中所有的符合正则的内容

返回值是列表

import re

lst = re.findall(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
# 也就是匹配所有数字串
print(lst)

在这里插入图片描述

4.2 finditer: 匹配字符串中所有的内容[返回的是迭代器]

从迭代器中拿到内容需要.group()

import re

it = re.finditer(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
for i in it:#迭代器for循环输出
    print(i.group())

在这里插入图片描述

4.3 search, 找到一个结果就返回, 返回的结果是match对象

拿数据需要.group(),匹配失败返回None

import re

s = re.search(r"\d+", "我的电话号是:10086, 我女朋友的电话是:10010")
print(s.group())

在这里插入图片描述

4.4 match 从头开始匹配,必须把10086放在待匹配的字符串开头才能匹配成功

真正意义上的从头开始,从待匹配文本的0位字符开始匹配,一般用的不多,功能不如search强大。

import re

s = re.match(r"\d+", "10086, 我女朋友的电话是:10010")
print(s.group())#10086

s = re.match(r"\d+", "我女朋友的电话是:10010,10086")
print(s)#None

在这里插入图片描述

4.5 compile 预加载正则表达式

预先定义一个正则的对象,后面只需要调用对象的方法就好了,不用每次都写一遍正则表达式,节省资源,提高效率

import re

# 预加载正则表达式
obj = re.compile(r"\d+")
#预先定义一个正则的对象,后面只需要调用对象的方法就好了,
# 不用每次都写一遍正则表达式,节省资源,提高效率

ret = obj.finditer("qwer233qwer566")
for it in ret:
    print(it.group())

ret = obj.findall("qwer233qwer899")
print(ret)

4.6 (?P<变量名>匹配规则)

(?P<变量名>匹配规则) 表示把符合这个匹配规则的内容存入对应变量名

import re
obj = re.compile(r"(?P<number>\d+)")# number的值就是匹配得到的数字
ret = obj.finditer("qwer233qwer566")
for it in ret:
    print(it.group("number"))


5. 综合实战

import re

s = """
<div class='jay'><span id='1'>郭麒麟</span></div>
<div class='jj'><span id='2'>宋铁</span></div>
<div class='jolin'><span id='3'>大聪明</span></div>
<div class='sylar'><span id='4'>范思哲</span></div>
<div class='tory'><span id='5'>胡说八道</span></div>
"""

# (?P<分组名字>正则) 可以单独从正则匹配的内容中进一步提取内容
obj = re.compile(r"<div class='.*?'><span id='(?P<id>\d+)'>(?P<name>.*?)</span></div>", re.S)  # re.S: 让.能匹配换行符

result = obj.finditer(s)
for it in result:
    print(it.group("id")+"->"+it.group("name"))

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows forfiles命令详解,Windows按时间搜索特定类型的文件。

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 forfiles 一、结果输出格式二、按时间搜索三、搜索指定类型文件四、批量删除文件 forfile…

Ubuntu远程SSH连接与远程桌面连接

目录 一、远程桌面连接 二、远程SSH连接 1、安装客户端 2、安装服务端 3、SSH客户端和服务端的区别 一、远程桌面连接 首先需要在Ubuntu里进行些设置&#xff0c;点击界面右上角的控制区&#xff0c;选择设置选项&#xff1b; 弹出界面进入网络中&#xff0c;点击设置图…

【致敬未来的攻城狮计划】— 连续打卡第十八天:FSP固件库开发GPT — PWM输出波形 — LED呼吸灯

系列文章目录 1.连续打卡第一天&#xff1a;提前对CPK_RA2E1是瑞萨RA系列开发板的初体验&#xff0c;了解一下 2.开发环境的选择和调试&#xff08;从零开始&#xff0c;加油&#xff09; 3.欲速则不达&#xff0c;今天是对RA2E1 基础知识的补充学习。 4.e2 studio 使用教程 5.…

Rust开发环境搭建到运行第一个程序HelloRust

一、Rust语言 1.1 Rust语言介绍 Rust 语言是一种高效、可靠的通用高级语言。其高效不仅限于开发效率&#xff0c;它的执行效率也是令人称赞的&#xff0c;是一种少有的兼顾开发效率和执行效率的语言。 Rust 语言由 Mozilla 开发&#xff0c;最早发布于2014年 9月。Rust 的编…

《ADC和DAC的基本架构》----学习记录(二)

2 模数转换器 2.1 ADC架构I&#xff1a;Flash转换器 2.1.1 比较器&#xff1a;1位ADC 转换开关是 1 位 DAC&#xff0c;而比较器是 1 位 ADC&#xff0c;如图所示。如果输入超过阈值&#xff0c;输出即会具有一个逻辑值&#xff0c;而输入低于阈值时输出又会有另一个值。此外…

寻找2020+跳蚱蜢(蓝桥杯JAVA解法)

目录 寻找2020&#xff1a;用户登录 题目描述 运行限制 跳蚱蜢&#xff1a;用户登录 题目描述 运行限制 寻找2020&#xff1a;用户登录 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵&a…

使用ChatGPT生成了十种排序算法

前言 当前ChatGPT非常火爆&#xff0c;对于程序员来说&#xff0c;ChatGPT可以帮助编写很多有用的代码。比如&#xff1a;在算法的实现上&#xff0c;就可以替我们省很多事。所以&#xff0c;小试牛刀一下&#xff0c;看看ChatGPT生成了排序算法怎么样&#xff1f; 简介 排序…

网站搭建之配置tomcat

【 本次配置架构】 【安全配置】 1.删除后台登录 在tomcat安装目录下的/conf文件下编辑tomcat-users.xml,删除里面带有标签的内容块&#xff0c;默认这部分是被注释了的。注释了任然会显示后台登录&#xff0c;需要彻底删除。 进入末行模式&#xff0c;也就是使用vim进去后&…

Flask开发之环境搭建

目录 1、安装flask 2、创建Flask工程 ​编辑 3、初始化效果 4、运行效果 5、设置Debug模式 6、设置Host 7、设置Port 8、在app.config中添加配置 1、安装flask 如果电脑上从没有安装过flask&#xff0c;则在命令行界面输入以下命令&#xff1a; pip install flask 如果电…

【MFAC】基于偏格式动态线性化的无模型自适应控制(Matlab代码)

例题来源&#xff1a;侯忠生教授的《无模型自适应控制&#xff1a;理论与应用》&#xff08;2013年科学出版社&#xff09;。 &#x1f449;对应书本 4.3 单输入单输出系统(SISO)偏格式动态线性化(PFDL)的无模型自适应控制(MFAC) 上一篇博客介绍了基于紧格式动态线性化的无模型…

C++每日一练:打家劫室(详解动态规划法)

文章目录 前言一、题目二、分析三、代码总结 前言 这题目出得很有意思哈&#xff0c;打劫也是很有技术含量滴&#xff01;不会点算法打劫这么粗暴的工作都干不好。 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 题目名称&#xff1a; 打家…

实现Newton方法的最小化函数(pytorch)

首先&#xff0c;我们要明确需求 def newton(theta, f, tol 1e-8, fscale1.0, maxit 100, max_half 20) ● theta是优化参数的初始值的一个向量。 ● f是要最小化的目标函数。该函数应将PyTorch张量作为输入&#xff0c;并返回一个张量。 ● tol是收敛容忍度。 ● fscale 粗…

【Leetcode -328.奇偶链表 - 725.分隔链表】

Leetcode Leetcode -328.奇偶链表Leetcode - 725.分隔链表 Leetcode -328.奇偶链表 题目&#xff1a;给定单链表的头节点 head &#xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起&#xff0c;然后返回重新排序的列表。 第一个节点的索引被认为是 奇数 &am…

苏州百特电器有限公司网站设计

苏州百特电器有限公司网站设计 五一假期作业企业门户网站布局设计 基于 <div> 的企业门户网站设计 by 小喾苦 我这里仅仅是使用 html css 来实现这个网站的效果&#xff0c;并不是宣传这个网站(现在这个网站已经过时并且无法进入) 实现效果 https://xkk1.github.io/…

出差在外,远程访问企业局域网象过河ERP系统「内网穿透」

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 转载自远程穿透文章&#xff1a;公网远程访问公司内网象过河ERP系统「内网穿透」 概述 ERP系统对于企业来说重要性不言而喻&am…

初识中央处理器CPU

目录 一、CPU功能 1.控制器功能 2.运算器功能 3.功能执行顺序 4.其他功能 二、CPU结构图 1.CPU与系统总线 2.CPU内部结构 3.运算器中的寄存器组 4.控制器中的寄存器组 三、执行指令的过程 1.指令周期的基本概念 2.完整的指令周期流程 3.数据通路 4.指令周期的数据…

React超级简单易懂全面的有关问题回答(面试)

目录 React事件机制&#xff1a; 2、React的事件和普通的HTML有什么不同&#xff1a; - 事件命名的规则不同&#xff0c;原生事件采用全小写&#xff0c;react事件采用小驼峰 3、React组件中怎么做事件代理&#xff1f;他的原理是什么&#xff1f; 4、React高阶组件、Rend…

【SpringBoot】 整合RabbitMQ 保证消息可靠性传递

生产者端 目录结构 导入依赖 修改yml 业务逻辑 测试结果 生产者端 目录结构 导入依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>&…

无人机集群路径规划:淘金优化算法(Gold rush optimizer,GRO)提供MATLAB代码

一、淘金优化算法GRO 淘金优化算法&#xff08;Gold rush optimizer&#xff0c;GRO&#xff09;由Kamran Zolf于2023年提出&#xff0c;其灵感来自淘金热&#xff0c;模拟淘金者进行黄金勘探行为。 参考文献&#xff1a; K. Zolfi. Gold rush optimizer: A new population-ba…

Python小姿势 - #### Python技术博客:Python多线程编程

Python技术博客&#xff1a;Python多线程编程 你好&#xff0c;这里是自媒体技术博主Aurora&#xff0c;今天我想分享一下Python多线程编程。 首先&#xff0c;什么是多线程编程&#xff1f;多线程编程是一种让多个线程同时执行的编程方式&#xff0c;它可以让程序的执行更加高…