我正在尝试将整个字符串替换为'#',最后4个字符除外。
以下内容:
def maskify(cc):
c2 = cc.replace(cc[:-4], '#')
return c2
print(maskify('TestName'))
结果:
#Name
我想它返回:
####Name
我在这里做错了什么?谢谢
答案 0 :(得分:2)
对于一个更简单的解决方案,您可以在字符串的最后4
个字符上使用rjust
,并用#
填充至其原始长度:
s = 'TestName'
s[-4:].rjust(len(s), '#')
'####Name'
函数的问题在于,您必须重复要使用的元素来进行尽可能多的替换。所以你应该这样做:
def maskify(cc):
c2 = cc.replace(cc[:-4], '#'*len(cc[:-4]))
return c2
答案 1 :(得分:1)
rjust()
的 yatu解决方案看起来不错,但是str.replace()
是一个虚假的朋友。它适用于a reasonably varied string
,但是如果在字符串中重复元素,则会失败(这是yatu的第二个解决方案):
def maskify(cc):
c2 = cc.replace(cc[:-4], '#'*len(cc[:-4]))
return c2
print(maskify('12121212'))
给予
########
我建议改为像这样“构建”新字符串,
def maskify(cc):
mask = '#' * (len(cc)-4)
return mask+cc[-4:]
给出理想的结果,
####1212