Python 正则表达式 re.sub()

引言

相信很多小伙伴在使用 Python 时都会遇到字符串替换的问题,除了使用内置函数 replace() 方法外,这里特来记录一下正则表达式的用法。

正文

调用方法:

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

用法说明:
扫描整个 字符串,找出所有符合pattern写法的对象,并使用repl替换。

示例1

import re

str1 = "The rain in Spain"
str2 = re.sub("\s", "5", str1)
print(str2)
"""
result:
The5rain5in5Spain
"""

我们使用字符5替换了字符串中所有的空格。

示例2

关于参数count,默认值为0,表示替换所有的符合要求的pattern对象。如果我们设置了该参数,比如这里我们设置count=2,那么程序会只替换前两个出现的满足要求的pattern对象。

import re

str1 = "The rain in Spain"
str2 = re.sub("\s", "5", str1, count=2)
print(str2)
"""
result:
The5rain5in Spain
"""

可以看到,代码运行的结果保留了第三个出现的空格。

示例3

我们以另一个字符串举例,比如如下字符串

str1 = ['abs\tdasda\tsdadf']

我们想要将这个字符串中的字符 f 替换为 111,我们该怎么操作呢?

方法1------compile() 方法

import re

str1 = 'abs\tdasda\tsdadf'
pattern = re.compile('f')
result = pattern.sub('1111', str1)
print(result)
"""
result:
abs	dasda	sdad1111
"""

这里需要注意一点,pattern 表示的是字符串中需要替换的字符或字符串,而不是要替换成的字符或字符串。

方法2------示例1和示例2中的简化方法

import re

str1 = 'abs\tdasda\tsdadf'
result = re.sub('f', '1111', str1)
print(result)
"""
result:
abs	dasda	sdad1111
"""

这里需要注意一点,re.sub() 中的第一个参数是需要被替换的字符或字符串,第二个参数是要被替换成的字符或字符串。这两种方法本质上都是 re 模块的 sub() 方法。

特别注意sub() 方法的返回值才是替换后的字符串。即 sub() 方法不改变原始字符串变量的值。

示例4------\t 字符替换

import re

str1 = 'abs\tdasda\tsdadf'
result = re.sub('\t', '1111', str1)
print(result)
"""
result:
abs1111dasda1111sdadf
"""

也很好处理,只需要把被替换字符变为 \t 就好了。

示例5------将两个 \t 之间的字符串进行替换包含 \t 字符

import re

str1 = 'abs\tdasda\tsdadf'
print(str1)
result = re.sub(r"\t.*?\t", r'1111', str1, flags=re.DOTALL)
print(result)
"""
result:
abs	dasda	sdadf
abs1111sdadf
"""

示例6------将两个 \t 之间的字符串进行替换且不包含 \t 字符

import re

str1 = 'abs\tdasda\tsdadf'
print(str1)
result = re.sub(r"(?<=\t).*?(?=\t)", r'1111', str1, flags=re.DOTALL)
print(result)
"""
result:
abs	dasda	sdadf
abs	1111	sdadf
"""

至此,我们完成了正则表达式的替换说明。是不是很有用呢?

如果大家觉得有用,就请点个赞吧~

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的大熊猫

你的鼓励将是我写作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值