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

如何在Python中使用正则表达式替换特定格式的文本?

在Python中使用正则表达式替换特定格式的文本,主要通过re模块的sub()subn()函数实现。这两个函数可以根据正则表达式模式查找匹配内容,并替换为指定的字符串或通过函数生成的内容。

一、核心函数

  1. re.sub(pattern, repl, string, count=0, flags=0)

    • 功能:替换字符串中所有匹配pattern的子串为repl
    • 返回值:替换后的新字符串
    • 参数:
      • pattern:正则表达式模式
      • repl:替换的字符串或回调函数
      • string:原始字符串
      • count:最大替换次数(默认0表示全部限制)
      • flags:正则匹配标志(如re.IGNORECASE忽略大小写)
  2. re.subn(pattern, repl, string, count=0, flags=0)

    • 功能:与sub()类似,但返回(新字符串, 替换次数)的元组

二、常用替换场景示例

1. 基础替换:固定字符串替换

将匹配的文本替换为固定内容。

import re# 将所有数字替换为"*"
text = "密码: 123456, 验证码: 789"
result = re.sub(r"\d+", "*", text)
print(result)  # 输出: 密码: *, 验证码: *# 限制替换次数(只替换前1个)
result = re.sub(r"\d+", "*", text, count=1)
print(result)  # 输出: 密码: *, 验证码: 789
2. 分组替换:利用匹配的分组内容

通过()捕获分组,在替换字符串中用\1\2等引用分组内容(类似变量复用)。

import re# 交换姓名格式:" lastName, firstName" → "firstName lastName"
text = "Bond, James; Doe, John"
pattern = r"(\w+), (\w+)"  # 分组1:姓氏,分组2:名字
result = re.sub(pattern, r"\2 \1", text)  # 用\2和\1交换顺序
print(result)  # 输出: James Bond; John Doe# 格式化日期:"MM/DD/YYYY" → "YYYY-MM-DD"
text = "今天是10/05/2023,昨天是10/04/2023"
pattern = r"(\d{2})/(\d{2})/(\d{4})"  # 分组1:月,分组2:日,分组3:年
result = re.sub(pattern, r"\3-\1-\2", text)
print(result)  # 输出: 今天是2023-10-05,昨天是2023-10-04
3. 函数替换:动态生成替换内容

当替换规则复杂时,repl可以是一个函数,根据匹配结果动态生成替换内容。

import re# 将数字乘以2(如"3"→"6","10"→"20")
def double_num(match):num = int(match.group())  # 获取匹配的数字return str(num * 2)text = "单价: 5, 数量: 3, 总价: 15"
result = re.sub(r"\d+", double_num, text)
print(result)  # 输出: 单价: 10, 数量: 6, 总价: 30# 敏感信息脱敏:保留手机号前3位和后4位,中间用*代替
def mask_phone(match):phone = match.group()return phone[:3] + "****" + phone[-4:]text = "联系电话: 13812345678, 备用电话: 19987654321"
result = re.sub(r"1[3-9]\d{9}", mask_phone, text)
print(result)  # 输出: 联系电话: 138****5678, 备用电话: 199****4321
4. 忽略大小写替换

通过flags=re.IGNORECASE(简写re.I)忽略大小写匹配。

import re# 将"apple"(不区分大小写)替换为"banana"
text = "Apple, APPLE, apple"
result = re.sub(r"apple", "banana", text, flags=re.IGNORECASE)
print(result)  # 输出: banana, banana, banana
5. 移除特定格式内容

将匹配的内容替换为空字符串,实现"删除"效果。

import re# 移除HTML标签(如<a>、<div>等)
html = "<h1>标题</h1><p>内容</p>"
result = re.sub(r"<.*?>", "", html)  # 匹配所有标签并替换为空
print(result)  # 输出: 标题内容# 移除字符串中的所有标点符号
text = "Hello, World! 这是一个示例:test."
result = re.sub(r"[^\w\s]", "", text)  # [^\w\s]匹配非单词和非空白字符
print(result)  # 输出: Hello World 这是一个示例 test

三、关键技巧

  1. 使用r前缀:替换字符串建议加r前缀(原始字符串),避免\被转义(如r"\2"正确引用分组2)。
  2. 贪婪与非贪婪匹配:替换时注意模式的匹配范围,必要时用?启用非贪婪模式(如.*?匹配尽可能少的字符)。
  3. 预编译模式:频繁替换时,用re.compile()编译模式提升效率:
    pattern = re.compile(r"\d+")
    result = pattern.sub("*", "A1B2C3")  # 输出: "A*B*C*"
    

通过sub()subn(),可以灵活处理各种替换需求,从简单的固定替换到复杂的动态生成替换内容,正则表达式都能高效完成。


文章转载自:

http://rGI9IGKY.wyLpy.cn
http://ddtsSYMo.wyLpy.cn
http://MwHdXCOd.wyLpy.cn
http://N8BTm8MS.wyLpy.cn
http://Xg9VLseb.wyLpy.cn
http://B86S8DaN.wyLpy.cn
http://LkCi5rBf.wyLpy.cn
http://4eB7CxYT.wyLpy.cn
http://rYx0tA1U.wyLpy.cn
http://7b9QKkHX.wyLpy.cn
http://39pCZAY3.wyLpy.cn
http://9ZYrkZ4H.wyLpy.cn
http://F4eBXu67.wyLpy.cn
http://baKfQoTe.wyLpy.cn
http://RsfFfRpO.wyLpy.cn
http://BdiHi4Cb.wyLpy.cn
http://uuM0ASqJ.wyLpy.cn
http://AA82zNVX.wyLpy.cn
http://09uBOrut.wyLpy.cn
http://RSz98syg.wyLpy.cn
http://qf89DrZS.wyLpy.cn
http://lrMBAPhH.wyLpy.cn
http://jc6WPctk.wyLpy.cn
http://TqUGAx4b.wyLpy.cn
http://Tg1YwIOJ.wyLpy.cn
http://i7F0dyjw.wyLpy.cn
http://vSZFgR2L.wyLpy.cn
http://VBQH448e.wyLpy.cn
http://GQrMYZQR.wyLpy.cn
http://iPCmoY70.wyLpy.cn
http://www.dtcms.com/a/372259.html

相关文章:

  • 【正则表达式】 正则表达式断言(Assertion)是什么?
  • GD32入门到实战39--SRAM
  • [RootersCTF2019]I_<3_Flask
  • 多功能台灯设计与实现(论文+源码)
  • SpringBoot+RustFS实现高效文件存储解决方案
  • Docker04-镜像源切换
  • Python 2025:量化金融与智能交易的新纪元
  • 基于 WeKnora 构建企业级 RAG 知识库:Windows 部署与实践全解析
  • 【Android】View 的基础知识
  • FastDFS V6双IP特性及配置
  • Spring Boot常用注解-详细解析+示例
  • 使用 Doxygen 生成 C++ 与 Python 项目文档
  • 【面试题】Transformer基础原理与数学模型
  • 插入排序与希尔排序
  • LLM面试基础(一)
  • More Effective C++ 条款33:将非尾端类设计为抽象类
  • 《详解链式队列:原理、操作与销毁方法》
  • Linux 系统资源监控与告警脚本
  • 记录jilu~
  • 现代云原生数据平台
  • 【Python脚本系列】PyCryptodome库解决网盘内.m3u8视频文件无法播放的问题(三)
  • DuckDB 1.4新增功能提前知道
  • Wi-Fi技术——传播与损耗
  • 管道的优缺点
  • 训练+评估流程
  • 【数学建模】烟幕干扰弹投放策略优化:模型与算法整合框架
  • PHP云课堂在线网课系统 多功能网校系统 在线教育系统源码
  • redis的高可用(哨兵)
  • Redis之分布式锁与缓存设计
  • pip常用指令小结