当前位置: 首页 > article >正文

在原有基础上的Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析

以下是Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析:

Python正则表达式终极指南

一、正则表达式引擎原理

1. 回溯机制解析

  • NFA(非确定性有限自动机)工作原理
  • 回溯的产生场景及性能影响
  • 灾难性回溯案例:
    # 危险模式示例
    re.match(r'(a+)+b', 'aaaaaaaaac')  # 指数级回溯
    

2. 优化策略

  • 原子组(Atomic Group):
    (?>pattern)  # 禁止回溯
    
  • 占有优先量词:
    *+ , ++ , ?+ , {m,n}+
    
  • 分支排序优化技巧

二、高级匹配技术

1. 零宽断言进阶

# 提取价格中的数值部分
text = "Price: $123.45"
re.search(r'(?<=\$)\d+\.\d{2}', text)  # 匹配123.45# 排除特定结尾
re.search(r'\b\w+(?<!ing)\b', 'coding eating sleep')  # 匹配sleep

2. 平衡组与递归匹配

# 匹配嵌套括号(需要regex模块)
import regex
pattern = r'\((?:[^()]|(?R))*\)'
regex.findall(pattern, '(a(b)c)')  # 匹配完整嵌套结构

3. 条件表达式

# 根据前缀匹配不同模式
pattern = r'(<)?\w+(?(1)>|$)'
re.match(pattern, '<tag>')  # 匹配
re.match(pattern, 'tag')    # 匹配

4. 命名引用与反向引用

# 重复单词检测
text = "the the quick brown fox"
re.findall(r'\b(?P<word>\w+)\s+(?P=word)\b', text)  # 匹配"the the"

三、Unicode处理

1. Unicode属性匹配

# 匹配所有汉字
re.findall(r'\p{Han}+', '你好Hello', flags=re.UNICODE)# 匹配所有货币符号
re.findall(r'\p{Sc}', '¥$€')  # 匹配['¥', '$', '€']

2. 标准化处理

import unicodedata
text = unicodedata.normalize('NFC', 'café')  # 统一字符表示

四、性能优化深度

1. 基准测试方法

import timeit
setup = '''
import re
pattern = re.compile(r'\d{3}-\d{4}')
text = 'Phone: 123-4567'
'''
timeit.timeit('pattern.search(text)', setup=setup)

2. 高效模式设计

  • 锚点优先原则:^.*?abc vs abc
  • 字符集优化:[aeiou] vs [^b-df-hj-np-tv-z]
  • 避免重复量词嵌套:(a*)*ba*b

3. 灾难性回溯解决方案

# 优化前(危险)
r'^(\d+,)*\d+$' # 优化后(安全)
r'^\d+(?:,\d+)*$'

五、复杂实战案例

1. 解析INI文件

ini = '''
[Section1]
key1 = value1
key2 = value2[Section2]
key3 = value3
'''pattern = r'''
^\[([^]]+)\]             # 匹配section
(?:                       
\n(?!\[).*?=.*?          # 匹配键值对
)+
'''
matches = re

相关文章:

在原有基础上的Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析

以下是Python正则表达式终极指南,新增高级用法、复杂案例和底层原理分析: Python正则表达式终极指南 一、正则表达式引擎原理 1. 回溯机制解析 NFA(非确定性有限自动机)工作原理回溯的产生场景及性能影响灾难性回溯案例:# 危险模式示例 re.match(r(a+)+b, aaaaaaaaac) …...

进制转换及C语言中进制转换方法

进制转换是计算机科学和数学中的基础操作&#xff0c;主要用于不同数制之间的数值表示转换。以下是常见进制&#xff08;二进制、八进制、十进制、十六进制&#xff09;的转换方法及示例&#xff1a; 一、其他进制 → 十进制 方法&#xff1a;按权展开&#xff0c;逐位相加。 …...

【我要成为配环境高手】node卸载与nvm安装

node卸载与nvm安装 1. node卸载 参考了这篇文章&#xff1a; https://blog.csdn.net/weixin_43801036/article/details/141487791 2. nvm安装 参考了这两篇文章&#xff1a; https://www.cnblogs.com/rnny/p/17839190.html#tid-z7A3nR https://blog.csdn.net/weixin_45811…...

环境变量与本地变量

目录 本地变量的创建 环境变量VS本地变量 认识完了环境变量我们来认识一下本地变量。 本地变量的创建 我们如果直接env是看不到本地变量的&#xff0c;因为本地变量和环境变量都具有独立性&#xff0c;环境变量是系统提供的具有全局属性的变量&#xff0c;都存在bash进程的…...

Docker安装Kafka(不依赖ZooKeeper)

创建docker-compose.yaml version: "3.9" #版本号 services:kafka:image: apache/kafka:3.9.0container_name: kafkahostname: kafkaports:- 9092:9092 # 容器内部之间使用的监听端口- 9094:9094 # 容器外部访问监听端口environment:KAFKA_NODE_ID: 1KAFKA_PROCES…...

Visual Studio中打开多个项目

1) 找到解决方案窗口 2) 右键添加→ 选择现有项目 3) 选择.vcxproj文件打开即可...

rust笔记7-生命周期显式标注

Rust 的生命周期(Lifetimes)是 Rust 内存安全模型的核心部分,用于确保引用始终有效,避免悬垂引用(Dangling References)。下面我们从生命周期的设计出发点、标注语法以及在不同上下文中的应用(函数、方法、结构体、trait 等)来详细介绍。 1. 生命周期设计的出发点 Rus…...

广西壮族自治区园区投促中心党委书记陶德文率团到访深兰科技

2月16日&#xff0c;广西壮族自治区园区投促中心党委书记、主任&#xff0c;自治区园区办党组成员陶德文率团来到深兰科技集团上海总部考察调研&#xff0c;并与深兰科技集团创始人、董事长陈海波等集团管理层座谈交流&#xff0c;双方围绕深兰科技人工智能项目落地广西的相关事…...

1005 K 次取反后最大化的数组和(贪心)

文章目录 题目[](https://leetcode.cn/problems/maximize-sum-of-array-after-k-negations/)算法原理源码总结 题目 如上图&#xff0c;k是取反的次数&#xff0c;在数组【4&#xff0c;-1,3】中&#xff0c;当k 1&#xff0c;把-2取反为2&#xff0c;和为9&#xff1b;在数组…...

Softing线上研讨会 | 自研还是购买——用于自动化产品的工业以太网

| 线上研讨会时间&#xff1a;2025年1月27日 16:00~16:30 / 23:00~23:30 基于以太网的通信在工业自动化网络中的重要性日益增加。设备制造商正面临着一大挑战——如何快速、有效且经济地将工业以太网协议集成到其产品中。其中的关键问题包括&#xff1a;是否只需集成单一的工…...

SpringBoot整合Redis和Redision锁

参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…...

【Pandas】pandas Series rename_axis

Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐&#xff0c;使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...

数仓搭建(hive):DM搭建(数据集市层)

DM层 数据集市层 &#xff08;Data Mart&#xff09; 粒度上卷&#xff08;Roll-up&#xff09;: 指的是沿着维度层次向上聚合汇总数据&#xff0c;从细粒度到粗粒度观察数据的操作。 示例 数仓的上一层DWS的是按日汇总 DM层基于DWS层主题日宽表上卷统计出按年,月,周的数…...

用LightRAG+智谱GLM-4提升政务对话精度:从知识图谱到精准问答的实战指南

在政务场景中&#xff0c;对话系统的精度至关重要&#xff0c;一个不准确的回答可能导致政策误解甚至行政失误。LightRAG结合智谱GLM-4&#xff0c;通过知识增强&#xff08;如知识图谱、检索增强生成RAG和动态上下文&#xff09;显著提升问答准确性。本文从代码实现到架构优化…...

用 Python 实现 DeepSeek R1 本地化部署

DeepSeek R1 以其出色的表现脱颖而出&#xff0c;不少朋友想将其本地化部署&#xff0c;网上基于 ollama 的部署方式有很多&#xff0c;但今天我要带你领略一种全新的方法 —— 使用 Python 实现 DeepSeek R1 本地化部署&#xff0c;让你轻松掌握&#xff0c;打造属于自己的 AI…...

动态内存分配算法对比:最先适应、最优适应、最坏适应与邻近适应

动态内存分配算法对比&#xff1a;最先适应、最优适应、最坏适应与邻近适应 在操作系统中&#xff0c;动态内存分配算法用于管理空闲内存块的分配和回收。最先适应算法&#xff08;First Fit&#xff09;、最优适应算法&#xff08;Best Fit&#xff09;和最坏适应算法&#x…...

GitHub基本操作及Git简单命令

GitHub简介 GitHub就是一个远程仓库&#xff0c;远程仓库可以理解为就是一个可以保存自己代码的地方&#xff0c;在实际开发当中一个项目往往是有多个人来共同协作开发完成的&#xff0c;那么就需要一个统一代码保存的地方&#xff0c;而GitHub就是起到一个共享和汇总代码的作…...

AI工作流+专业知识库+系统API的全流程任务自动化

我有点悲观&#xff0c;甚至很沮丧&#xff0c;因为AI留给普通人的机会不多了&#xff0c;这既是人类之间权力的斗争&#xff0c;也是硅基生命和碳基生命的斗争。AI自动化是无法避免的趋势&#xff0c;如果人类不能平权&#xff0c;那就只能跪下接受审判。 通过整合AI工作流、专…...

C++深拷贝\浅拷贝

C 中的深拷贝&#xff08;Deep Copy&#xff09;和浅拷贝&#xff08;Shallow Copy&#xff09;是指在对象复制时&#xff0c;对象成员的复制方式不同。理解这两种拷贝构造方式非常重要&#xff0c;尤其是在涉及到动态内存分配和资源管理时。 浅拷贝&#xff08;Shallow Copy&…...

本地文件共享——HFS

目录 1.介绍&#xff1a; 2.下载&#xff1a; 3.开始使用&#xff1a; 1.介绍&#xff1a; HFS&#xff08;HTTP File Server&#xff09;是一款轻量级的本地文件共享软件&#xff0c;主要用于快速搭建一个基于网页的临时文件服务器&#xff0c;支持通过浏览器直接上传或下载…...

第十二届先进制造技术与材料工程国际学术会议 (AMTME 2025)

重要信息 大会官网&#xff1a;www.amtme.org&#xff08;了解会议&#xff0c;投稿等&#xff09; 大会时间&#xff1a;2025年3月21-23日 大会地点&#xff1a;中国-广州 简介 2025年第十二届先进制造技术与材料工程 (AMTME 2025) 定于2025年3月21-23日在中国广州隆重举…...

【Alertmanager】alertmanager告警系统原理剖析与应用实战,应有尽有非常全面

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

C语言预处理学习笔记

1. 预处理器的功能 预处理器&#xff08;Preprocessor&#xff09;在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头&#xff0c;主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容&#xff0c;通常用…...

jQuery AJAX 方法详解

jQuery AJAX 方法详解 引言 随着互联网技术的不断发展,前端开发领域的技术也在不断更新迭代。jQuery 作为一种广泛使用的前端JavaScript库,极大地简化了DOM操作和事件处理。在众多jQuery功能中,AJAX(Asynchronous JavaScript and XML)方法尤为突出,它允许我们在不重新加…...

C++之虚函数、虚函数表

C 虚函数、虚函数表详解与实践 C中虚函数是实现多态的重要技术&#xff0c;接下来将从汇编、以及gdb调试运行方面下手全面了解虚函数、虚函数表、以及虚函数调用。 原理初认识 一个由虚函数的类将会有一个虚函数表&#xff0c;且所有该类的实例化对象共享一个虚函数表。虚函…...

零基础学QT、C++(一)安装QT

目录 如何快速学习QT、C呢&#xff1f; 一、编译器、项目构建工具 1、编译器&#xff08;介绍2款&#xff09; 2、项目构建工具 二、安装QT 1、下载QT安装包 2、运行安装包 3、运行QT creator 4、导入开源项目 总结 闲谈 如何快速学习QT、C呢&#xff1f; 那就是项目驱动法&…...

Python SMTP 实现邮件发送功能

发送邮件的流程 登录我们邮箱&#xff0c; 书写接收者的邮箱&#xff0c; 书写题目与内容&#xff0c;添加附件&#xff0c; 点击发送。 邮件协议 smtp 是邮件发送的协议。pop3 是邮件接收的协议。 smtplib模块用法 创建协议对象&#xff1a;smtpObj smtplib.SMTP() 创建…...

低价窜货要如何管控

在竞争激烈的市场环境中&#xff0c;低价与窜货就像一对如影随形的“孪生兄弟”&#xff0c;给品牌的健康发展带来了极大的困扰。低价销售不仅压缩了合理的利润空间&#xff0c;破坏了市场的价格体系&#xff0c;还会引发恶性竞争&#xff0c;让整个市场陷入混乱无序的状态。而…...

如何看nginx.conf文件?

是的&#xff0c;你的理解是对的&#xff01;在 Nginx 配置中&#xff0c;最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时&#xff0c;Nginx 会根据请求的路径&#xff08;即 URL&#xff09;匹配 location 块&#xff0c;然后按照匹配的顺序逐层向…...

Linux中POSIX应用场景

Linux 提供了丰富的 POSIX&#xff08;Portable Operating System Interface&#xff09;标准接口&#xff0c;这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数&#xff0c;涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...