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

 更新时间:2025年09月08日 15:17:15   作者:xiaopengbc  
在Python中使用正则表达式替换特定格式的文本,主要通过re模块的sub()和subn()函数实现,本文给大家介绍Python中使用正则表达式替换特定格式的文本,感兴趣的朋友一起看看吧

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

一、核心函数

  • re.sub(pattern, repl, string, count=0, flags=0)
    • 功能:替换字符串中所有匹配pattern的子串为repl
    • 返回值:替换后的新字符串
    • 参数:
      • pattern:正则表达式模式
      • repl:替换的字符串或回调函数
      • string:原始字符串
      • count:最大替换次数(默认0表示全部限制)
      • flags:正则匹配标志(如re.IGNORECASE忽略大小写)
  • 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(),可以灵活处理各种替换需求,从简单的固定替换到复杂的动态生成替换内容,正则表达式都能高效完成。

到此这篇关于Python中使用正则表达式替换特定格式的文本的文章就介绍到这了,更多相关python正则表达式替换文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python函数高级(命名空间、作用域、装饰器)

    Python函数高级(命名空间、作用域、装饰器)

    这篇文章介绍了Python函数的高级用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Python中json库的操作指南

    Python中json库的操作指南

    JSON是存储和交换文本信息的语法,类似XML,JSON比XML更小、更快,更易解析,且易于人阅读和编写,下面这篇文章主要给大家介绍了关于Python中json库的操作指南,需要的朋友可以参考下
    2023-04-04
  • Python if else条件语句形式详解

    Python if else条件语句形式详解

    这篇文章主要介绍了Python if else条件语句形式详解,在 Python 中,可以使用 if else 语句对条件进行判断,然后根据不同的结果执行不同的代码,这称为选择结构或者分支结构,接下来小编就根据情况的不同介绍if else条件语句形式的不同,需要的朋友可以参考一下
    2022-03-03
  • Python selenium把歌词评论做成词云图

    Python selenium把歌词评论做成词云图

    大家好,本篇文章主要讲的是Python selenium把歌词评论做成词云图,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • pyinstaller打包python3.6和PyQt5中各种错误的解决方案汇总

    pyinstaller打包python3.6和PyQt5中各种错误的解决方案汇总

    pyinstaller是打包python很方便的一个套件,我们可以很轻易地使用他,下面这篇文章主要给大家介绍了关于pyinstaller打包python3.6和PyQt5中各种错误解决的相关资料,需要的朋友可以参考下
    2022-08-08
  • 用Python编写一个简单的FUSE文件系统的教程

    用Python编写一个简单的FUSE文件系统的教程

    这篇文章主要介绍了用Python编写一个简单的FUSE文件系统的教程,对于数据的备份很有帮助,需要的朋友可以参考下
    2015-04-04
  • 详解tensorflow载入数据的三种方式

    详解tensorflow载入数据的三种方式

    这篇文章主要介绍了详解tensorflow载入数据的三种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Python爬虫实现爬取下载网站数据的几种方法示例

    Python爬虫实现爬取下载网站数据的几种方法示例

    这篇文章主要为大家介绍了Python爬虫实现爬取下载网站数据的几种方法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • CentOS安装OpenSSL1.1.1全过程

    CentOS安装OpenSSL1.1.1全过程

    文章介绍了从头开始编译安装Python3.10的步骤,包括检查和安装必要的依赖项、下载并解压源码、配置和编译环境、创建软连接以及配置环境变量,最后验证安装是否成功
    2025-03-03
  • Python机器学习NLP自然语言处理基本操作关键词

    Python机器学习NLP自然语言处理基本操作关键词

    本文是Python机器学习NLP自然语言处理系列文章,带大家开启一段学习自然语言处理 (NLP) 的旅程. 本文主要学习NLP自然语言处理关键词的操作
    2021-09-09

最新评论