Re解析(正则表达式解析)
正则表达式基础
元字符
B站教学视频: 正则表达式元字符基本使用

量词

贪婪匹配和惰性匹配
惰性匹配如下两张图,而 .* 就表示贪婪匹配,即尽可能多的匹配到符合的字符串,如果使用贪婪匹配,那么结果就是图中的情况三


python中re模块
re模块的常用方法
import re# findall(正则表达式, 待匹配的字符串) -> 符合正则表达式的内容(以列表的形式返回)
# 含义:匹配字符串中所有符合正则表达式的内容(以列表的形式返回)
res_findall = re.findall(r"\d+", "中国移动:10086,中国联通:10010")
print(res_findall) # ['10086', '10010']# re.finditer(正则表达式, 待匹配的字符串) -> 符合正则表达式的内容(以迭代器的形式返回)
# 含义:匹配字符串中所有符合正则表达式的内容(以迭代器的形式返回)
res_finditer = re.finditer(r"\d+", "中国移动:10086,中国联通:10010")
print(res_finditer) # <callable_iterator object at 0x000001CB2875B340>
for item in res_finditer:"""下面两行输出语句的输出结果如下:<re.Match object; span=(5, 10), match='10086'>10086<re.Match object; span=(16, 21), match='10010'>10010item 中还有其他的方法,如item.start()/item.end()分别表示匹配到的字符串在原字符串中的起始索引和结束索引"""print(item) # 得到match对象print(item.group()) # 得到匹配的字符串# re.search(正则表达式, 待匹配的字符串) -> 符合正则表达式的内容(返回match对象)
# 含义:匹配字符串中第一个匹配到的符合正则表达式的内容(返回match对象)
res_search = re.search(r"\d+", "中国移动:10086,中国联通:10010")
print(res_search) # <re.Match object; span=(5, 10), match='10086'>
print(res_search.group()) # 10086# 上述三种方法都是全文匹配,而match是从头开始匹配
# re.match(正则表达式, 待匹配的字符串) -> 符合正则表达式的第一个字符串内容(返回match对象)
# 含义:从待匹配的字符串的第一个字符开始匹配,将匹配到的第一个结果返回,返回的是match对象
res_match = re.match(r"\d+", "中国移动:10086,中国联通:10010")
print(res_match) # None,字符串开头不是数字,所以等于匹配不成功,结果为空
# print(res_match.group()) # 报错
res_match = re.match(r"\d+", "10086,中国联通:10010")
print(res_match) # <re.Match object; span=(0, 5), match='10086'>
print(res_match.group()) # 10086# 预加载
# 应用场景:在爬虫中,想要从网页中匹配到想要的内容,匹配的正则表达式可能会很复杂,
# 而又多次的使用到该正则表达式,则可以预加载正则表达式
# 如下,好处就是该正则可以反复使用
obj = re.compile(r"\d+")
res1 = obj.findall("中国移动:10086,中国联通:10010")
res2 = obj.finditer("中国移动:10086,中国联通:10010")
res3 = obj.search("中国移动:10086,中国联通:10010")
res4 = obj.match("中国移动:10086,中国联通:10010")
分组匹配
s = """<div class="jay">周杰伦</div><div class="jj">林俊杰</div>
"""
# (?P<name>.*?) 分组匹配(P为大写),相当于把括号中的.*?匹配到的内容给变量name
# 然后通过item.group('name')获取到name的值
# 只要把想要单独获取的内容按以上形式:(?P<xxx>正则表达式) 即可获取
# re.S 的作用就是让 . 也可以匹配到换行符
# flags 是re模块中compile、match、findall等方法的一个参数,具体用法可以百度
obj = re.compile(r'<div class=".*?">(?P<name>.*?)</div>', re.S)
res = obj.finditer(s)
print(res) # <callable_iterator object at 0x0000020F2E89AEC0>
for item in res:"""输出结果如下:<re.Match object; span=(5, 31), match='<div class="jay">周杰伦</div>'><div class="jay">周杰伦</div>周杰伦<re.Match object; span=(36, 61), match='<div class="jj">林俊杰</div>'><div class="jj">林俊杰</div>林俊杰"""print(item) # <re.Match object; span=(5, 31), match='<div class="jay">周杰伦</div>'>print(item.group()) # <div class="jay">周杰伦</div>print(item.group('name')) # 周杰伦
注:关于re模块方法中的flags参数作用,可以百度一下
案例——豆瓣top250(re解析版)
B站视频教程:爬取豆瓣top250电影
import requests
import re
import csvurl = "https://movie.douban.com/top250"
headers = {"User-Agent": "xxx(写上自己电脑的)"
}
resp = requests.get(url, headers=headers)
# print(resp.text) # 没加headers之前结果为空,说明网站有一些反扒机制
pattern = (r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?'r'导演: (?P<director>.*?) .*?主演: (?P<performer>.*?)...<br>.*?'r'<span class="rating_num" property="v:average">(?P<score>\d.\d)</span>')obj = re.compile(pattern, re.S)
res = obj.finditer(resp.text)
# 把获取到的数据存入CSV文件,方便以后对数据进行操作
# 关于CSV文件,请百度
f = open('data.csv', mode='w', encoding='utf-8')
csv_writer = csv.writer(f) # 表示向文件写入数据
for i in res:# print(i.group('name'))# print(i.group('director'))# print(i.group('performer'))# print(i.group('score').strip())dic = i.groupdict() # 将数据以字典形式返回# print(dic)# 将字典的值按行写入文件,文件中的每一行就是一部电影的信息# csv文件中,每一行数据以逗号分隔每个值csv_writer.writerow(dic.values())
f.close()
resp.close()
print("数据解析完成!")
部分csv文件内容如下:

相关文章:
Re解析(正则表达式解析)
正则表达式基础 元字符 B站教学视频: 正则表达式元字符基本使用 量词 贪婪匹配和惰性匹配 惰性匹配如下两张图,而 .* 就表示贪婪匹配,即尽可能多的匹配到符合的字符串,如果使用贪婪匹配,那么结果就是图中的情况三 p…...
HTML输出特殊字符详细方法
以下是部分特殊字符代码表,它们的完整应用代码格式为:&#;用下面的四位数字替换,将得到对应的符号。(注意:应用这些代码,编辑器应该切换到HTML模式) ☏260f ☎260e ☺263a ☻263b ☼263c ☽…...
《漫画算法》笔记——计算两个大数的和
例题: 输入:“123”,“234” 输出:“357” 思路: 使用数组,分别计算每一位上的加和,注意记录进位信息。 然后,将数组恢复成字符串,输出。 值得注意的是,加和…...
Python3.13版本改进规划
大家好,最近faster-cpython 项目的文档介绍了关于 Python 3.13 的规划,以及在 3.13 版本中将要实现的一些优化和改进。faster-python 是 Python 的创始人 Guido van Rossum 和他的团队提出的计划 ,目标是在四年内将 CPython 的性能提升五倍。…...
aws配置以及下载 spaceNet6 数据集
一:注册亚马逊账号 注册的时候,唯一需要注意的是信用卡绑定,这个可以去淘宝买,搜索aws匿名卡。 注册完记得点击登录,记录一下自己的账户ID哦! 二:登录自己的aws账号 2.1 首先创建一个用户 首…...
进阶之路:高级Spring整合技术解析
Spring整合 1.1 Spring整合Mybatis思路分析1.1.1 环境准备步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:添加Mybatis核心配置文件步骤8:编写应用程序步骤9:运行程序 1.…...
【ArcGIS微课1000例】0081:ArcGIS指北针乱码解决方案
问题描述: ArcGIS软件在作图模式下插入指北针,出现指北针乱码,如下图所示: 问题解决 下载并安装字体(配套实验数据包0081.rar中获取)即可解决该问题。 正常的指北针选择器: 专栏介绍ÿ…...
uniapp运行到手机模拟器
第一步,下载MUMU模拟器 下载地址:MuMu模拟器官网_安卓12模拟器_网易手游模拟器 (163.com) 第二步,运行mumu模拟器 第三步,运行mumu多开器 第三步,查看abs 端口 第四步,打开HBuilder,如下图,将…...
基于PHP的蛋糕购物商城系统
有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈:phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…...
嵌入式中的定时器概念
定时器概述 定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于定时、计数、脉冲宽度调制(PWM)等领域。 具体而言,定时器可以实现以下功能: 计时:定时器可以用来实现延时操作,例如等待外部设备的稳定、等待数据的接收等,也可以…...
鸿蒙ArkTS语言介绍与TS基础语法
1、ArkTS介绍 ArkTS是HarmonyOS主力应用开发语言,它在TS基础上,匹配ArkUI框架,扩展了声明式UI、状态管理等响应的能力,让开发者以更简洁、更自然的方式开发跨端应用。 JS 是一种属于网络的高级脚本语言,已经被广泛用…...
08_CMDB系统开发二
CMDB系统开发二 一、用户组管理模块 1、展示用户组列表 Django自带了用户表,同时也带了用户组表。他们是多对多关系。用户组模型很简单,和User模型是多对多的关系。用户组顾名思义,就是对用户进行了分组。其作用在权限控制中就是可以批量的…...
JavaOOP篇----第九篇
系列文章目录 文章目录 系列文章目录前言一、java中是值传递引用传递?二、实例化数组后,能不能改变数组长度呢?三、假设数组内有5个元素,如果对数组进行反序,该如何做?四、形参与实参区别前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…...
华为OD机试 - 区间交集 - 深度优先搜索dfs算法(滥用)(Java 2023 B卷 200分)
目录 专栏导读一、题目描述二、输入描述三、输出描述备注用例1、输入2、输出3、说明 四、解题思路1、核心思路:2、具体步骤 五、Java算法源码再重新读一遍题目,看看能否优化一下~解题步骤也简化了很多。 六、效果展示1、输入2、输出3、说明 华为OD机试 2…...
德人合科技 | 防止公司电脑文件数据资料外泄,自动智能透明加密保护系统
【透明加密软件】——防止公司电脑文件数据资料防止外泄,自动智能透明加密保护内部核心文件、文档、图纸、源代码、音视频等资料! PC端访问地址: www.drhchina.com 🌟 核心功能: 透明加密:采用高级加密算…...
常见加解密算法分析(含使用场景)
加密算法主要分为三类:对称加密算法、非对称加密算法和散列算法。下面将分别介绍这些类别中的常见算法及其特点和使用场景。 对称加密算法 1. AES (Advanced Encryption Standard) 简介: AES是一种广泛使用的对称加密标准,可以使用128、19…...
Oracle基本的SQL语句
1.最基本的增删改查 1.1.新增 insert 1.1.1.单表新增 INSERT INTO table_count_output (data_date,table_name,table_count ) VALUES (2023-03-15,FMCUSLVL,351 );COMMIT; 1.1.2.关联新增 INSERT INTO table_count_output (data_date,table_name,table_count )SELECTdata_…...
golang项目目录推荐
序言 逛GitHub的时候发现有个4.5k对goalng项目结构的推荐的项目,这里就简单的推荐下 文件目录 /cmd 项目主要的应用程序。 对于每个应用程序来说这个目录的名字应该和项目可执行文件的名字相匹(例如,/cmd/myapp)。不要在这个…...
Maven scope属性解读和使用注意事项
目录 compile runtime test system provided import dependencyManagement标签介绍 maven的scope有哪些: maven的scope一共包括:compile、runtime、test、system、provided、import。 compile <dependency><groupId>org.apache.htt…...
Vue3使用 xx UI解决布局高度自适应
解决方案 在相应的Sider部分添加:height: ‘91.8vh’,即可。示例: <Layout><Sider hide-trigger :style"{background: #fff, height: 91.8vh}"> }知识补充 vw、vh、vmin、vmax是一种视窗单位,也是相对单…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
