Python正则替换终极指南:用re.sub玩转字符串魔法

Python正则替换终极指南:用re.sub玩转字符串魔法

一、为什么re.sub是文本处理的瑞士军刀?

在Python的re模块中,re.sub()的周下载量突破5800万次(2025年PyPI数据),它实现了:

  • 📍 模式匹配替换
  • 📍 动态内容生成
  • 📍 批量文本清洗
  • 📍 结构化数据转换

二、基础篇:5分钟掌握核心用法

1. 函数原型剖析

re.sub(pattern, repl, string, count=0, flags=0)
  • pattern:正则表达式模式(字符串或编译后的模式对象)
  • repl:替换内容(字符串或回调函数)
  • string:原始输入字符串
  • count:最大替换次数(0表示全部替换)
  • flags:匹配模式(如忽略大小写re.IGNORECASE

2. 基础替换示例

import re # 替换所有数字为*
text = "订单号:AB2025 金额:1500元"
result = re.sub(r"\d", "*", text)
print(result)  # 订单号:AB**** 金额:****元 # 限制替换次数 
text = "1-2-3-4-5"
result = re.sub(r"-", ":", text, count=2)
print(result)  # 1:2:3-4-5 

以下案例均要添加 import re

三、进阶篇:解锁三大高阶技巧

1. 分组捕获与反向引用

\1 代表匹配的第1项,\2代表匹配的第2项,以此类推

# 重组日期格式(YYYY/MM/DD → DD-MM-YYYY)
text = "2025/02/20 → 2026/03/21"
result = re.sub(r"(\d{4})/(\d{2})/(\d{2})", r"\3-\2-\1", text)
print(result)  # 20-02-2025 → 21-03-2026 # 给手机号加掩码 
text = "联系电话:13812345678"
result = re.sub(r"(\d{3})\d{4}(\d{4})", r"\1****\2", text)
print(result)  # 联系电话:138****5678 

2. 动态回调函数

# 数学表达式升级(数字扩大1000倍)
def multiply(match):num = float(match.group(1))return str(num * 1000)text = "重量0.5kg 长度1.2m"
result = re.sub(r"(\d+\.?\d*)", multiply, text)
print(result)  # 重量500.0kg 长度1200.0m 

3. 命名分组与复杂替换

# 处理国际化日期格式
text = "Date: 02/20/2025 (MM/DD/YYYY)"
result = re.sub(r"(\d{2})/(\d{2})/(\d{4})",r"\3年\2月\1日",text
)
print(result)  # Date: 2025年02月20日 (MM/DD/YYYY)

四、工业级最佳实践

1. 性能优化方案

\b:匹配一个单词边界。

# 预编译正则模式(处理百万级文本时提速3倍)
pattern = re.compile(r"\b\d{6}\b")  # 匹配6位纯数字
text = "邮政编码:100001 200002"
result = pattern.sub("[邮编]", text)
print(result)  # 邮政编码:[邮编] [邮编]

2. 处理多语言文本

中日韩字符过滤(2025年新增unicode扩展区支持)
# 预编译正则表达式(工业级推荐)
cjk_pattern = re.compile(r"([\u4e00-\u9fff\u3400-\u4dbf]|"  # 中文r"[\u3040-\u309F\u30A0-\u30FF]|"  # 日文r"[\uAC00-\uD7A3\u1100-\u11FF])+",  # 韩文flags=re.UNICODE
)text = "2025新版:漢字 かな 전자문서"
result = cjk_pattern.sub("[CJK]", text)
print(result)  # 输出:2025[CJK]:[CJK] [CJK] [CJK]

如果不过滤中文:

cjk_pattern = re.compile(r"([\u3040-\u309F\u30A0-\u30FF]|"  # 日文r"[\uAC00-\uD7A3\u1100-\u11FF])+",  # 韩文flags=re.UNICODE
)text = "2025新版:漢字 かな 전자문서"
result = cjk_pattern.sub("[CJK]", text)
print(result)  # 2025新版:漢字 [CJK] [CJK]

3. 安全替换策略

# 防御正则注入攻击
def safe_sub(pattern, repl, text):escaped_pattern = re.escape(pattern)return re.sub(escaped_pattern, repl, text)user_input = "恶意输入[a-z].*"
text = "重要数据:abc123"
result = safe_sub(user_input, "", text)  # 原样输出
print(result)  # 重要数据:abc123

五、三大实战应用场景

1. 数据清洗管道

def clean_log(text):rules = [(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "[IP]"),  # 隐藏IP (r"\d{2}:\d{2}:\d{2}", "[TIME]"),               # 隐藏时间 (r"password=\w+", "password=")              # 脱敏密码 ]for pattern, repl in rules:text = re.sub(pattern, repl, text)return text 

2. 模板引擎开发

template = "欢迎{name}!您的订单{order_id}已发货"
context = {"name": "张三", "order_id": "20250220"}def render(tpl, data):return re.sub(r"{(\w+)}",lambda m: str(data.get(m.group(1), "")), tpl )print(render(template, context))  # 欢迎张三!您的订单20250220已发货 

3. Markdown转换器

def markdown_to_html(text):text = re.sub(r"### (.+)", r"\1", text)  # 三级标题 text = re.sub(r"!\[(.*?)\]\((.*?)\)", r'', text)return text 

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

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

相关文章

gen_gauss_filter用于检测带方向的线条

目录 一、核心参数分析 1.1 方向覆盖范围 1.2 滤波器方向带宽 二、角度配置建议 三、参数选择依据 四、实施建议 五、模拟图测试(项目图档不好直接分享) 5.1 模拟图制作 5.2 检测伪代码 在Halcon中使用高斯滤波器检测多方向线条时,角度参数的选取需要综合考虑滤波…

C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串转换工具

文章目录 1. 传统转换方法的局限性2. std::to_chars:数值到字符串的高效转换函数原型:返回值:示例代码:输出: 3. std::from_chars:字符串到数值的高效解析函数原型:返回值:示例代码&…

深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案

华为终端正面临销售模式转型的关键时刻,旨在通过构建MPRLTC项目,以规避对运营商定制的过度依赖,并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统,支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…

Python正则表达式处理中日韩字符过滤全解析

Python正则表达式处理中日韩字符过滤全解析 一、核心原理:Unicode字符范围定位 中日韩字符在Unicode中的分布: 中文:\u4e00-\u9fff(基本区) \u3400-\u4dbf(扩展A区) \U00020000-\U0002a6df…

基于WOA鲸鱼优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鲸鱼优化算法(WOA)是一种模拟座头鲸捕食行为的元启发式优化算法。其主要原理基于座头鲸独特的 “气泡网” 捕食策略,通过数学模…

【数据分析】3 数据分析成长之路

职业发展路径: 向上发展(技术方向):可以详细说明成为数据科学家或专家所需的具体技能和步骤,包括学习的算法、工具等。向下发展(业务方向):可以探讨结合业务知识的具体领域&#xff…

excel导入Mysql中时间格式异常

问题描述: 当使用xls/xlsx/csv导入mysql中,如果列是时间类型比如excel表中显示2024/02/20 09:18:00,导入后时间可能就会变成1900-01-01 09:18:00这样。 问题原因: 这是由于excel表中和数据库中的时间类型不匹配导致。 问题解决…

async checkpointing

Reducing Model Checkpointing Times by Over 10x with PyTorch Distributed Asynchronous Checkpointing | PyTorch 最初来源:IBM Research 核心思想:GPU->CPU,用的是blocking;CPU->Disk,用的是异步不阻塞训练…

Nginx稳定版最新1.26.2源码包安装【保姆级教学】

Nginx安装及配置 开源Nginx官网地址(https://nginx.org) Nginx源码包下载地址(https://nginx.org/en/download.html) Mainline version 主线版本 Stable version 稳定版本 Legacy versions 陈旧版本 下载Nginx源码文件 curl -O https://nginx.org/download/nginx-1.26.2.t…

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前,需…

GeoHD - 一种用于智慧城市热点探测的Python工具箱

GeoHD - 一种用于智慧城市热点探测的Python工具箱 详细原理请参考:Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137. 代码下载:下载 1. 简介 在城市数据…

16 中介者(Mediator)模式

中介者模式 1.1 分类 (对象)行为型 1.2 提出问题 实现一个机场的起飞管理系统,如果由驾驶员们讨论谁先飞,后果可能是灾难性的。 1.3 解决方案 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&a…

最薄的机身,游最深的海

经济全球化的潮流,势不可挡。 “技术、通讯和全球化,正在消除传统的地理和经济边界,使竞争环境趋于平等。”《世界是平的》作者托马斯弗里德曼预言的"扁平化竞争"正加速演进。 在高端智能手机战场,一场由中国企业主导…

【HarmonyOS Next】鸿蒙监听手机按键

【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键,或者扩展按键的需求。亦或者是在某些场景下,禁止用户按下某些按键的业务需求。 这两种需求,鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…

IC设计版图中GDS2文件格式详解

版图中GDS2文件格式详解 目录 什么是GDS2文件?GDS2文件的历史与发展GDS2文件的结构解析GDS2文件的核心元素GDS2 vs. OASIS: 核心差异如何生成与查看GDS2文件?GDS2文件的局限性应用场景总结 什么是GDS2文件? GDS2(Graphic Data …

KMP算法:字符串匹配的智慧跳跃

文章目录 起因:暴力法的致命缺陷暴力搜索的局限性 KMP核心思想:避免重复理解前缀表(PMT)不匹配时的回退机制代码:高效字符串匹配补充:next表和PMT表 暴力法 vs KMP总结:KMP 是如何改变游戏规则的…

上位机知识篇---setuptools

文章目录 前言简介一、核心功能1.依赖管理自动安装依赖版本约束额外依赖组命令行工具插件系统 2.开发模式安装3.资源文件管理4.Egg 分发(已逐渐被 Wheel 取代)5.命名空间包 二、基础用法1. 项目结构示例2. 配置文件 setup.cfg3. setup.py 最小化示例&…

蓝桥杯学习大纲

(致酷德与热爱算法、编程的小伙伴们) 在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充! 一、蓝桥必备高频考点 我们以此为重点学习…

Go 错误处理与调试:面向对象的入门教程

Go 错误处理与调试:面向对象的入门教程 Go 语言因其简洁、高效和易于并发编程的特性,逐渐成为后端开发的主流语言之一。错误处理是任何编程语言中非常重要的一部分,尤其是在 Go 语言中,Go 提供了一种不同于传统异常处理机制的错误…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…