re.sub()用法详解

本文详细介绍了Python的re.sub()函数,包括参数含义、使用示例,展示了如何替换字符串中的特定模式,如单一数字、字母、非数字、非字母等,以及如何处理多个连续的字符。通过实例解析了匹配和替换的多种情况,是理解Python正则表达式替换操作的实用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码、参数及其意义:

def sub(pattern, repl, string, count=0, flags=0):
    """Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the Match object and must return
    a replacement string to be used."""
    return _compile(pattern, flags).sub(repl, string, count)

从源码中看出re.sub()函数共有5个参数:

  • pattern:表示正则中的模式字符串;
  • repl:表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;
  • string:表示要被处理(查找替换)的原始字符串;
  • count:可选参数,表示要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会替换;
  • flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。

re.sub():匹配替换为选择的文本。

1、匹配单个数字或字母

示例代码:【只匹配单一数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  只匹配单一数字
ret = re.sub(r'[0-9]', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9]', '*', s) 这句话表示只匹配单一数字,并将每一个数字替换为一个星号 。

示例代码:【只匹配单一字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  只匹配单一字母
ret = re.sub(r'[a-z]', "*", s)
print(ret)
ret = re.sub(r'[A-Z]', "*", s)
print(ret)
ret = re.sub(r'[a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[A-z]', "*", s)
print(ret)

运行结果:

  •  re.sub(r'[a-z]', '*', s) 表示只匹配单一小写字母,并将每一个小写字母替换为一个星号 。
  • re.sub(r'[A-Z]', '*', s) 表示只匹配单一大写字母,并将每一个大写字母替换为一个星号 。
  • re.sub(r'[A-Za-z]', '*', s) 这句话则表示只匹配单一字母,并将每一个字母替换为一个星号 。

示例代码:【匹配单一数字和字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配单一数字和字母
ret = re.sub(r'[0-9a-z]', "*", s)
print(ret)
ret = re.sub(r'[0-9A-Z]', "*", s)
print(ret)
ret = re.sub(r'[0-9a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[0-9A-z]', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9A-Z]', '*', s) 表示只匹配单一数字和大写字母,并将每一个数字和大写字母替换为一个星号 。
  • re.sub(r'[0-9a-z]', '*', s) 表示只匹配单一数字和小写字母,并将每一个数字和小写字母替换为一个星号 。
  • re.sub(r'[0-9A-Za-z]', '*', s) 表示只匹配单一数字和字母,并将每一个数字和字母替换为一个星号 。

2、匹配多个数字或字母

注意:这里的所说的多个指的是大于等于一个。

示例代码:【匹配多个数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个数字
ret = re.sub(r'[0-9]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9]+', '*', s) 表示匹配多个连续的数字,并将多个连续的数字替换为一个星号 。

示例代码:【匹配多个字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个字母
ret = re.sub(r'[a-z]+', "*", s)
print(ret)
ret = re.sub(r'[A-Z]+', "*", s)
print(ret)
ret = re.sub(r'[a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[a-z]+', '*', s) 表示匹配多个连续的小写字母,并将多个连续的小写字母替换为一个星号 。
  • re.sub(r'[A-Z]+', '*', s) 表示匹配多个连续的大写字母,并将多个连续的大写字母替换为一个星号 。
  • re.sub(r'[A-Za-z]+', '*', s) 表示匹配多个连续的字母,并将多个连续的字母替换为一个星号 。

示例代码:【匹配多个连续数字和字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个数字和字母
ret = re.sub(r'[0-9a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9A-Za-z]+', '*', s) 表示匹配多个连续的数字和字母,并将多个连续的数字、连续的字母、连续的数字和字母替换为一个星号 。

3、匹配其他

示例代码:【匹配非数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非数字
ret = re.sub(r'[^0-9]', "*", s)
print(ret)
ret = re.sub(r'[^0-9]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^0-9]', '*', s) 表示匹配单个非数字,并将单个非数字替换为一个星号 。
  • re.sub(r'[^0-9]+', '*', s) 表示匹配多个连续的非数字,并将多个连续的非数字替换为一个星号 。

示例代码:【匹配非字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非字母
ret = re.sub(r'[^a-z]', "*", s)
print(ret)
ret = re.sub(r'[^A-Z]', "*", s)
print(ret)
ret = re.sub(r'[^a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[^a-z]+', "*", s)
print(ret)
ret = re.sub(r'[^A-Z]+', "*", s)
print(ret)
ret = re.sub(r'[^a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^a-z]', '*', s) 表示匹配单个非小写字母,并将单个非小写字母替换为一个星号 。
  • re.sub(r'[^A-Z]', '*', s) 表示匹配单个非大写字母,并将单个非大写字母替换为一个星号 。
  • re.sub(r'[^A-Za-z]', '*', s) 表示匹配单个非字母,并将单个非字母替换为一个星号 。
  • re.sub(r'[^a-z]+', '*', s) 表示匹配多个连续的非小写字母,并将多个连续的非小写字母替换为一个星号 。
  • re.sub(r'[^A-Z]+', '*', s) 表示匹配多个连续的非大写字母,并将多个连续的非大写字母替换为一个星号 。
  • re.sub(r'[^A-Za-z]+', '*', s)表示匹配多个连续的非字母,并将多个连续的非字母替换为一个星号 。

示例代码:【匹配非数字和非字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非数字和非字母
ret = re.sub(r'[^0-9a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[^0-9a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^0-9A-Za-z]', '*', s) 表示匹配单个非数字和非字母,并将单个非数字和非字母替换为一个星号 。
  • re.sub(r'[^0-9A-Za-z]+', '*', s) 表示匹配多个连续的非数字和非字母,并将多个连续的非数字和非字母替换为一个星号 。

示例代码:【匹配固定形式】【只保留字母和空格,将 repl 设置为空字符即可】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配固定形式
ret = re.sub(r'[^a-z ]', " ", s)
print(ret)
ret = re.sub(r'[^a-z ]+', " ", s)
print(ret)
ret = re.sub(r'[^a-zA-Z ]', " ", s)
print(ret)
ret = re.sub(r'[^a-zA-Z ]+', " ", s)
print(ret)

运行结果:

示例代码:【去除以 @ 开头的英文单词】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  去除以 @ 开头的英文单词
ret = re.sub(r'@[a-zA-Z ]+', " ", s)
print(ret)

运行结果:

示例代码:【去除原始字符串中的URL】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:535646343@qq.com. Today is 2021/12/21. It is a wonderful DAY!"

#  d.去除原始字符串中的URL
ret = re.sub(r'https[:.]+\S+', "", s)
print(ret)

运行结果:

示例代码:【匹配到的所有空格使用“+”来替换】

import re

s = "Long live the people's Republic of China"
ret = re.sub("\s", "+", s)
print(ret)

ret2 = re.sub("\s", "+", s, 3)  # 通过count参数控制替换的次数
print(ret2)

运行结果:

### Python `re.sub` 函数详解 #### 功能描述 `re.sub` 是 Pythonre (正则表达式) 模块中的一个重要工具,用于查找并替换字符串中符合特定模式的部分。此功能不仅限于简单的字符替换,还可以利用复杂的正则表达式来定义更精细的匹配规则[^1]。 #### 参数说明 - **pattern**: 要被搜索的正则表达式模式。 - **replacement**: 替代原字符串的新内容,可以是简单字符串或是返回所需替代文本的方法。 - **string**: 需要进行操作的目标字符串。 - **count**(可选): 定义最多替换成多少次,默认为全部替换。 - **flags**(可选): 设置正则表达式的标志位,比如忽略大小写等。 当 replacement 是一个方法时,该方法会接收 match 对象作为参数,并应返回用来代替匹配项的新字符串[^3]。 #### 示例代码 下面的例子展示了如何使用 `re.sub` 将 URL 中的实际域名替换为本地测试服务器地址: ```python import re url = "https://example.com/path/to/resource" pattern = r"https?://[\w.-]+" def replace_domain(match): return "http://127.0.0.1:9091/" out = re.sub(pattern, replace_domain, url) print(out) ``` 这段脚本的结果将是把原始链接里的主机名部分替换成了指定 IP 地址和端口号组成的路径[^2]。 另外,在某些情况下,可能希望知道发生了几次替换动作,这时就可以考虑使用同属 re 模块下的另一个相似函数——`re.subn()`,它除了完成相同的工作外还会额外给出实际发生过的替换次数[^4]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值