【正则表达式】核心知识点全景解析
目录
- 一、基础语法架构
- 二、核心元字符详解
- 三、高级匹配技巧
- 1. 字符集合
- 2. 分组与引用
- 3. 断言机制
- 四、Python re模块核心方法
- 五、性能优化策略
- 1. 编译重用
- 2. 避免回溯陷阱
- 3. 选择高效量词
- 六、典型应用场景
- 1. 数据验证
- 2. 数据提取
- 3. 文本清洗
- 七、调试技巧宝典
- 1. 可视化调试工具
- 2. Python调试模式
- 八、延伸学习方向
一、基础语法架构
二、核心元字符详解
元字符 | 作用描述 | 应用示例 | 注意事项 |
---|---|---|---|
. | 匹配任意单字符 | a.c 匹配abc/a1c | 不匹配换行符 |
\d | 匹配数字 | \d{3} 匹配3位数字 | 等效于[0-9] |
\w | 匹配字母数字下划线 | \w+ 匹配单词 | 等效于[A-Za-z0-9_] |
\s | 匹配空白字符 | \s+ 匹配多个空格 | 包含空格/制表符/换行 |
^ | 匹配字符串起始位置 | ^Start 匹配行首 | 在[]中表示取反 |
$ | 匹配字符串结束位置 | end$ 匹配行尾 | 多行模式下的差异 |
* | 匹配前元素0次或多次 | a*b 匹配b/ab/aab | 贪婪匹配 |
+ | 匹配前元素1次或多次 | a+b 匹配ab/aab | 至少出现1次 |
? | 匹配前元素0次或1次 | colou?r 匹配color/colour | 非贪婪模式修饰符 |
{n,m} | 匹配前元素n到m次 | \d{3,5} 匹配3-5位数字 | 边界值处理 |
三、高级匹配技巧
1. 字符集合
# 匹配元音字母
pattern = r'[aeiou]' # 排除数字匹配
pattern = r'[^0-9]' # 范围匹配
pattern = r'[A-Za-z0-9_]' # 等效\w
2. 分组与引用
# 捕获分组
re.search(r'(ab)+c', 'ababc') # 匹配'ababc',分组捕获'ab'# 非捕获分组
re.findall(r'(?:Mr|Ms)\. (\w+)', 'Mr. Smith, Ms. Brown') # 输出['Smith', 'Brown']# 命名分组
match = re.search(r'(?P<year>\d{4})-(?P<month>\d{2})', '2023-08')
print(match.group('year')) # 输出2023# 反向引用
re.sub(r'(\w+) \1', r'\1', 'hello hello') # 输出'hello'
3. 断言机制
# 正向先行断言(后面必须包含指定内容)
re.findall(r'\d+(?=元)', '价格128元') # 匹配128# 负向先行断言(后面不能包含指定内容)
re.findall(r'\d+(?!元)', '价格128美元') # 匹配128# 正向后行断言(前面必须包含指定内容)
re.findall(r'(?<=价格)\d+', '价格128') # 匹配128# 负向后行断言(前面不能包含指定内容)
re.findall(r'(?<!价格)\d+', '重量128') # 匹配128
四、Python re模块核心方法
方法 | 作用描述 | 返回值类型 | 适用场景 |
---|---|---|---|
re.match() | 从字符串起始位置匹配 | Match对象/None | 验证格式 |
re.search() | 扫描整个字符串匹配第一个结果 | Match对象/None | 查找首个匹配项 |
re.findall() | 查找所有匹配的子串 | 列表 | 提取多个数据 |
re.finditer() | 返回迭代器形式匹配结果 | 迭代器 | 大数据量处理 |
re.sub() | 替换匹配内容 | 替换后的字符串 | 批量修改文本 |
re.split() | 根据模式分割字符串 | 列表 | 复杂格式分割 |
re.compile() | 预编译正则表达式 | Pattern对象 | 重复使用正则表达式 |
五、性能优化策略
1. 编译重用
# 错误做法(多次编译)
for text in texts:re.findall(r'\d+', text)# 正确做法(预编译)
pattern = re.compile(r'\d+')
for text in texts:pattern.findall(text) # 效率提升3-5倍
2. 避免回溯陷阱
# 危险正则(嵌套量词)
r'(a+)+b' # 输入'aaaaaaaaac'时会发生灾难性回溯# 优化方案(固化分组)
r'(?>(a+))+b' # 使用原子组阻止回溯
3. 选择高效量词
r'\d{4}-\d{2}-\d{2}' # 明确量词范围
优于
r'\d+-\d+-\d+' # 模糊量词增加回溯可能
六、典型应用场景
1. 数据验证
# 身份证号验证(18位)
pattern = r'^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$'# URL验证
pattern = r'^(https?://)?([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$'
2. 数据提取
# 提取HTML链接
re.findall(r'<a\s+href="([^"]+)"', html_content)# 提取JSON值
re.findall(r'"price":\s*(\d+\.\d{2})', json_str)
3. 文本清洗
# 去除HTML标签
re.sub(r'<[^>]+>', '', html_text)# 统一日期格式
re.sub(r'(\d{4})/(\d{2})/(\d{2})', r'\1-\2-\3', date_str)
七、调试技巧宝典
1. 可视化调试工具
- Regex101:实时高亮显示匹配结果
- Regexr:提供速查手册和测试案例
- Debuggex:生成正则表达式状态机图
2. Python调试模式
pattern = re.compile(r'''^(\d{3}) # 区号-? # 可选分隔符(\d{8}) # 主号码
''', re.VERBOSE) # 启用注释模式# 查看正则解析树
re.DEBUG(r'\d{3}-\d{8}')
八、延伸学习方向
- 正则引擎原理:DFA/NFA引擎差异
- 性能优化算法:Thompson NFA匹配算法
- 安全防护:ReDoS攻击防范
- 自然语言处理:正则与NLP结合应用
- 可视化编程:正则表达式生成工具开发
学习路线建议:基础语法 → 分组断言 → 性能优化 → 引擎原理 → 安全防护
附:常见陷阱速查表
贪婪匹配陷阱:.* → 改为.*?
错误转义问题:r'\d\.' vs '\d\.'
字符集混淆:[a-z] 不包含大写字母
边界条件:^$在多行模式的差异
回溯爆炸:避免嵌套无限量词
掌握正则表达式需要理论结合实践,建议从具体案例入手,逐步深入底层原理,最终达到"手中无正则,心中有正则"的境界。
相关文章:
【正则表达式】核心知识点全景解析
目录 一、基础语法架构二、核心元字符详解三、高级匹配技巧1. 字符集合2. 分组与引用3. 断言机制 四、Python re模块核心方法五、性能优化策略1. 编译重用2. 避免回溯陷阱3. 选择高效量词 六、典型应用场景1. 数据验证2. 数据提取3. 文本清洗 七、调试技巧宝典1. 可视化调试工具…...
深度学习--ResNet残差神经网络解析
文章目录 前言一、什么是ResNet网络二、传统卷积神经网络存在的问题1、梯度消失和梯度爆炸2、退化问题 三、如何解决问题四、残差结构五、18层残差网络1、解释2、隔层相加优点3、隔层相加数值增大问题 六、18层残差网络以外的表格示例七、BN层(Batch Normalization&…...
数据结构线性表的顺序存储结构
线性表是由零个或多个数据元素组成的有序序列。 特点: 数据元素间是有顺序的; 数据元素的个数是有限的; 一般来说,数据元素的类型是相同的(强类型语言)。c/c是强类型语言,必须指定数据类型。…...
深入解析C++ STL Queue:先进先出的数据结构
一、引言 在计算机科学中,队列(Queue)作为一种遵循先进先出(FIFO)原则的数据结构,是算法设计和系统开发的基础组件。C STL中的queue容器适配器以简洁的接口封装了底层容器的操作,为开发者提供…...
永磁同步电机控制算法-反馈线性化控制
一、原理介绍 基于非线性系统的精确线性化控制方法,采用精确反馈线性化原理对永磁同步电机进行输入-输出线性化,该方法通过坐标变换和状态反馈将系统的数学模型转变为两个线性子系统,在实现线性化的同时也对系统中电流和转速存在的耦合现象进…...
开源 RAG 引擎:文档理解精准、检索高效、可视化干预灵活,一站式搞定
引言: RAGFlow 是一款基于深度文档理解的开源 RAG 引擎,与 LLM 结合后可实现精准引用问答。它支持 20 多种文档格式解析,配备智能分块策略及混合检索方案,还有可视化干预界面,且支持 Docker 快速部署,堪称…...
URP-UGUI相关知识
一、UGUI的基本组成部分 Canvas (画布)所有UI都需要放在Canvas画布下面,不然无法显示EventSystem 所有的事件响应系统都需要依赖于EventSystem,若删除该组件,交互效果就 不会显示 1.Canvas(画…...
COMSOL多孔结构传热模拟
多孔结构传热模拟涉及对多孔介质内部复杂的热量传递过程进行建模和分析,这类模拟对于优化材料设计、提高能源效率以及解决环境问题等方面具有重要意义。本案例介绍在COMSOL内建立全连通多孔结构几何模型,并将孔隙及基体划分两相材料,进行多孔…...
【CSS】层叠,优先级与继承(四):层叠,优先级与继承的关系
层叠,优先级与继承的关系 前文概括 【CSS】层叠,优先级与继承(一):超详细层叠知识点 【CSS】层叠、优先级与继承(二):超详细优先级知识点 【CSS】层叠,优先级与继承&am…...
CDN加速http请求
一、CDN加速定义 CDN(Content Delivery Network,内容分发网络)是通过全球分布式节点服务器缓存网站内容,使用户就近获取数据的技术。其核心目标是缩短用户与内容之间的物理距离,解决网络拥塞、带宽不足等问题ÿ…...
python实战项目63:获取腾讯招聘信息内容并进行统计分析
python实战项目63:获取腾讯招聘信息内容并进行统计分析 一、需求分析二、流程分析1、获取指定招聘工作类型的目标地址url。2、采集详情页信息。3、保存数据4、完整爬虫代码三、统计分析一、需求分析 本项目的需求是爬取腾讯社会招聘信息网中社会招聘的不同工作类别岗位数据,…...
FlinkUDF用户自定义函数深度剖析
Flink 作为一款强大的流批一体数据处理引擎,其灵活性和扩展性在很大程度上依赖于用户自定义函数(User-Defined Functions, UDF)。UDF 允许开发者根据业务需求扩展 Flink 的核心功能,实现复杂的数据转换、聚合或分析。本文将系统性…...
Python图形界面编程(一)
目录 一、相关的库 1、tkinter库 2、PyQt库 二、图形界面编程要点 三、tkinter控件 1、tkinter控件表 2、tkinter的常用控件 3、tkinter的扩展控件 四、tkinter布局 1、简单示例 2、默认情况下的grid规则 3、调整窗口和网格 (1)调整窗口 &…...
HarmonyOS Grid 网格列表可长按 item 拖动移动位置
方案一 @Component struct WorkCircleCreatePage {// 存储车控列表的数组@State VehicleDoorArr: IVehicleDoor[] = []// 当前移动的Item索引@State CurrentIndex: number = -1// 拖动时显示的数据@State MoveItem: IVehicleDoor = { title: , icon: }// 拖动时放大倍数@State…...
出现 ORA-00904: “TENANT_ID“: 标识符无效 解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 1. 问题所示 执行代码的时候,出现如下所示: org.springframework.jdbc.BadSqlGrammarException:</...
榜单持久化
榜单持久化的基本流程是这样的: 创建表 持久化Redis数据到数据库 清理Redis数据 现在,创建表的动作已经完成,接下来就轮到Redis数据的持久化了。持久化的步骤如下: 读取Redis数据 判断数据是否存在 不存在,直接结束…...
璞华ChatBI闪耀2025数博会:对话式数据分析引领数智化转型新范式
4月17日至19日,2025中国(武汉)数字经济产业博览会在武汉盛大举办,璞华集团携自主研发的“ChatBI自然语言问答式数据分析平台”惊艳亮相。以 "通过对话让数据说话" 为主题,璞华集团在 A3-T8 展位构建了沉浸式…...
力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值
前言 简单、中等 √ 二分法思路很简单,但是判断边界太麻烦了!难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右,目标大于中间值(向下取整)时,左中1,小于,右中-1&…...
leetcode-哈希表
哈希表 127. 单词接龙 题目 字典 wordList 中从单词 beginWord 到 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s(1) -> s(2) -> ... -> s(k): 每一对相邻的单词只差一个字母。 对于 1 < i < k 时,每个 s(i) 都在…...
信息技术有限公司项目管理手册
这篇文档是信息技术有限公司的项目管理指导手册,对软件公司项目管理者具有重要价值,主要体现在以下几个方面: 管理全面规范 涵盖内容广:从项目的整体管理到各个具体领域,如范围管理、进度管理、成本管理等&…...
TFTP服务调试
在tftpboot目录下进行sudo minicom 启动内核时 问题:程序启动卡在Loading阶段 原因:tftp协议的问题 、或者网卡配置的问题 解决:1.检查网线是否插好 多试几次 2.检查tftp服务是否正常 在minicom中调试ping pc机的ip地址 2.进入boot调…...
date-picker组件的shortcuts为什么不能配置在vue的data的return中
在 Vue 中,shortcuts 是一个选项,通常用于配置像 date-picker 这样的组件的日期快捷方式。这里有一些原因解释为什么 shortcuts 不应该配置在 data 的 return 中,而是应该配置在 data 的外部(例如,直接作为组件的一个属…...
迭代器模式:统一数据遍历方式的设计模式
迭代器模式:统一数据遍历方式的设计模式 一、模式核心:将数据遍历逻辑与数据结构解耦 在软件开发中,不同的数据结构(如数组、链表、集合)有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…...
RocketMQ 核心架构速览
欢迎光临小站:致橡树 文章现有讲述比较简单,后续逐渐丰富各部分内容。 Apache RocketMQ 作为阿里巴巴开源的一款分布式消息中间件,凭借其高吞吐、低延迟、高可用等特性,成为金融级稳定性场景的首选解决方案。本文将深入剖析 Roc…...
kafka安装、spark安装
kafka简介 Kafka就是一个分布式的用于消息存储的消息队列。 kafka角色 Kafka中存储的消息,被消费后不会被删除,可以被重复消费,消息会保留多长,由kafka自己去配置。默认7天删除。背后的管理工作由zookeeper来管理。 kafka安装 …...
迅为RK3562开发板ARM四核A53核心板多种系统适配全开源
迅为RK3562开发板ARM四核A53核心板多种系统适配全开源 RK3562开发板(2GB内存16GB存储)...
用交换机连接两台电脑,电脑A读取/写电脑B的数据
1、第一步,打开控制面板中的网络和共享中心,如下图配置,电脑A和电脑B均要配置; 注意:要保证电脑A和电脑B在同一子网掩码下,不同的IP地址; 2、在电脑上同时按‘CommandR’,在弹出的输…...
线程入门3
synchronized修饰方法 synchronized可以修饰代码块(在线程入门2中有例子),也可以修饰普通方法和静态方法。 修饰普通方法 修饰普通方法简化写法: 修饰静态方法 修饰静态方法简化写法: 注意:利用synchronized上锁,锁的…...
【C++】AVL树
目录 一、AVL树的引入 二、AVL树 🍔AVL树的概念 🍟AVL树节点的定义 🌮AVL树的插入 🥪AVL树的旋转 三、AVL树的验证 四、结语 一、AVL树的引入 🌟我们知道 map/multimap/set/multiset 这几个容器的共同点是&#…...
Java大师成长计划之第1天:Java编程基础入门
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 欢迎来到“Java大师成长计划”系列文…...
Java线程中断机制详解
中断机制是Java中一种协作式的线程停止方式,它提供了一种优雅的线程间通信机制,用于请求另一个线程停止当前工作。 中断机制的核心概念 中断标志位(Interrupt Status) 每个线程都有一个boolean类型的中断状态标志(native方法控制)…...
gem5-gpu教程06 回归测试
gem5-gpu包括gem5风格的回归测试,以避免常见错误,并在变更集之间保持模拟系统性能的一致性。如果你想为gem5-gpu做出贡献,你必须确保你的更改通过了包含的回归测试。 回归测试是一种软件测试类型,其主要目的是确保新代码的更改没有对现有功能造成影响。在软件开发过程中,当…...
查询Hologres或postgresql中的数据
因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…...
C# 文件读取
文件读取是指使用 C# 程序从计算机文件系统中获取文件内容的过程。将存储在磁盘上的文件内容加载到内存中,供程序处理。主要类型有:文本文件读取(如 .txt, .csv, .json, .xml);二进制文件读取(如 .jpg, .pn…...
On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其一CLT与LLM知识推理
这个学习笔记,是在精读Anthropic的博客 On the Biology of a Large Language Model 的过程中留下的笔记。 由于原文非常长,我会分2-3 个博客来写。 作者的思路 作者对常用的LLM特征解读工具 SAE/Transcoder 进行了优化,增加了跨层连接的能力…...
Postman忘记密码访问官网总是无响应
1.Header Editor插件下载 百度网盘下载: 链接:https://pan.baidu.com/s/1EV6cY7TYQVgPjip3v-vhfQ 提取码:yyds 2.插件配置 下载规则url:https://azurezeng.github.io/static/HE-GoogleRedirect.json 、U(向上)、L(向左)和 R(向右)组成的 48 字符描…...
深度学习中的黑暗角落:梯度消失与梯度爆炸问题解析
📌 友情提示: 本文内容由银河易创AI(https://ai.eaigx.com)创作平台的gpt-4o-mini模型生成,旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证,建议读者通过官方文档或实践进一步确认其准…...
【数字图像处理】机器视觉(1)
判别相对应的点 1. 图像灰度化 2. 局部特征 3. 仿射不变性特征 图像变化的类型 【1】几何变化:旋转、相似(旋转 各向相同的尺度缩放)、仿射(非各向相同的尺度缩放) 【2】灰度变化:仿射灰度变化 角点 角…...
# 构建和训练一个简单的CBOW词嵌入模型
构建和训练一个简单的CBOW词嵌入模型 在自然语言处理(NLP)领域,词嵌入是一种将词汇映射到连续向量空间的技术,这些向量能够捕捉词汇之间的语义关系。在这篇文章中,我们将构建和训练一个简单的Continuous Bag of Words…...
Ubuntu20.04下GraspNet复现流程中的问题
pytorchcudacudnn的版本问题相对于GraspNet来说至关重要!!!至关重要!!!至关重要!!!(重要的事情说三边) 我的显卡是3070 那么首先说结论 使用30系…...
【ROS2】机器人操作系统安装到Ubuntu简介
主要参考: https://book.guyuehome.com/ROS2/1.系统架构/1.3_ROS2安装方法/ 官方文档:https://docs.ros.org/en/humble/Installation.html 虚拟机与ubuntu系统安装 略,见参考文档 ubutun换国内源,略 1. 设置本地语言 确保您有…...
从0到1掌握机器学习核心概念:用Python亲手构建你的第一个AI模型(超多代码+可视化)
🧠 一、开始 真正动手实现一个完整的AI项目!从数据预处理、特征工程、模型训练,到评估与调优,一步步还原你在动画视频中看到的所有核心知识点。 📦 二、环境准备 建议使用 Python 3.8,推荐工具࿱…...
Java面试题汇总
1王二哥 https://javabetter.cn/sidebar/sanfene/redis.html#_10-redis-%E6%8C%81%E4%B9%85%E5%8C%96%E6%96%B9%E5%BC%8F%E6%9C%89%E5%93%AA%E4%BA%9B-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB 2.小林 https://www.xiaolincoding.com/redis/data_struct/command.html#…...
Ollama API 应用指南
1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST(主要)、GET(部分接口) 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…...
React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案
一条“Hydration failed”的错误,让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用,一切顺利,直到打开了 SSR(服务端渲染),突然看到这个令人头皮发麻的报错: …...
【论文精读】Reformer:高效Transformer如何突破长序列处理瓶颈?
目录 一、引言:当Transformer遇到长序列瓶颈二、核心技术解析:从暴力计算到智能优化1. 局部敏感哈希注意力(LSH Attention):用“聚类筛选”替代“全量计算”关键步骤:数学优化: 2. 可逆残差网络…...
iOS18 MSSBrowse闪退
iOS18 MSSBrowse闪退 问题方案结果 问题 最近升级了电脑系统(15.4.1),并且也升级了xcode(16.3)开发工具。之后打包公司很早之前开发的项目。 上线之后发现在苹果手机系统18以上,出现了闪退问题。 涉及到的是第三方MSSBrowse,在选择图片放大的…...
create_function()漏洞利用
什么是 create_function() create_function() 是 PHP 早期提供的一个用来创建匿名函数的函数: $func create_function($a,$b, return $a $b;); echo $func(1, 2); // 输出 3 第一个参数是函数的参数列表(字符串形式),第二个参…...
leetcode-数组
数组 31. 下一个排列 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如,arr [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大…...