某些字符替换指数范围在字符串 - 的Python

时间:2019-02-02 21:16:42

标签: python string

我正在尝试将整个字符串替换为'#',最后4个字符除外。

以下内容:

def maskify(cc):
    c2 = cc.replace(cc[:-4], '#')
    return c2

print(maskify('TestName'))

结果:

#Name

我想它返回:

####Name

我在这里做错了什么?谢谢

2 个答案:

答案 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