在Python的正则表达式模块re中,我们常用的一个方法是 re.sub
。它的作用是正则替换。我要把字符串 abc123xyz456
中的数字替换为 *
号(例如在脱敏模块中去掉电话号码):
>>> import re
>>> a = 'abc123xyz456'
>>> b = re.sub('\d+', '*', a)
>>> print(b)
abc*xyz*
现在假设字符串变成了 abc123789xyz456
,前面的数字有6位,后面的数字有3位。我想把数字逐位替换为星号: abc******xyz***
。用正则表达式模块如何快速实现?
import re
def repl(obj):
length = len(obj.group(0))
return '*' * length
y = re.sub('\d+', repl, 'abc123789xyz456')
print(y) # abc******xyz***
这说明, re.sub
的第二个参数,除了是普通字符串外,还能够是一个函数。这个函数接受了一个match对象。所有被匹配到的数据会被传入这个函数中。于是你就能在这个函数中对这个数据做任何你想做的处理。