Python re.sub
- 引言
- 正文
- 示例1
- 示例2
- 示例3
- 方法1------compile() 方法
- 方法2------示例1和示例2中的简化方法
- 示例4------\t 字符替换
- 示例5------将两个 \t 之间的字符串进行替换包含 \t 字符
- 示例6------将两个 \t 之间的字符串进行替换且不包含 \t 字符
引言
相信很多小伙伴在使用 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
"""
至此,我们完成了正则表达式的替换说明。是不是很有用呢?
如果大家觉得有用,就请点个赞吧~