引言

相信很多小伙伴在使用 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
"""

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

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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐