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)
sub使用示例
将字符串中的数字替换成*号
import re
替换字符串中的数字为*号
s = '作者-上海悠悠 QQ交流群:717225969 blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏'
new = re.sub("[0-9]", "*", s)
print(new)
# 作者-上海悠悠 QQ交流群:********* blog地址:https://www.cnblogs.com/yoyoketang/ 欢迎收藏
把字符串 s 中的每个空格替换成”%20”
import re
替换s中的空格为%20
s = "We are happy."
print(re.sub(r' ', "%20", s))
# We%20are%20happy.
把字符串中的连续数字替换成hello
import re
把字符串中的连续数字替换成hello
s = "the number 200-40-3000"
print(re.sub(r'[\d]+', "hello", s))
# the number hello-hello-hello
替换时间格式 01/11/2021 替换成 2021/01/11
import re
替换时间格式 01/11/2021 替换成 2021/01/11
s = "today is 01-11-2021."
day = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'\3-\2-\1', s)
print(day) # today is 2021-11-01.
# 也可以用g<3>-g<2>-g<1>
day2 = re.sub(r'(\d{2})-(\d{2})-(\d{4})', r'g<3>-g<2>-g<1>', s)
print(day) # today is 2021-11-01.
\3
和
\g<3>
指代的的都是前面匹配的第3个分组
repl传函数对象
匹配字符串中的数字加2
import re
匹配字符串中的数字加2
def addAge(match) ->str:
'''返回匹配的值加2'''
age = match.group()
return str(int(age)+2)
s = 'my age is 20'
# repl 如果它是可调用的函数对象,则传递match对象,并且必须返回要使用的替换字符串
x = re.sub(r'[\d]+', addAge, s)
print(x)
# my age is 22
count替换次数
sub 加 count 参数可以控制要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会被替换;
import re
替换字符串中的空格为%20,只替换一次
s = "We are happy."
print(re.sub(" ", "%20", s, count=1))
# We%20are happy.
subn方法使用
subn方法与sub()相同, 但返回一个元组, 其中包含新字符串和替换次数。
import re
替换字符串中的空格为%20,只替换一次
s = "We are happy."
x, n = re.subn(" ", "%20", s, )
print("替换后:", x)
print("替换次数: ", n)