如何用字符替换部分字符串

时间:2017-04-10 05:39:00

标签: python

我正在尝试创建一个打印到'n'的代码,并用“*”替换其余的字符。 这是我到目前为止的代码“

def replace(s,n):
    return s.replace(s[n:], "*")

然而它输出

    replace("hello", 2)
   'he*'

应该是'他***'

4 个答案:

答案 0 :(得分:2)

您应该将"*"乘以您要替换的字符数。此外,您应在(len(s)-n)*"*"之后添加s[n:]而不是替换(因为字符串中的多个位置可能会显示相同的字符集)。你可以这样做:

def replace(s,n):
    return s[:n]+(len(s)-n)*"*"
replace('hello', 2)

这会打印'he***'

答案 1 :(得分:1)

有两个基本问题。首先,s.replace将用第二个参数替换整个第一个参数。也许更重要的是,它会在字符串上找到它的任何地方替换它。因此,请考虑以下示例:

>>> def replace(s,n):
...     return s.replace(s[n:], "*")
...
>>> replace('lalahahalala', 8)
'*haha*'
>>>

相反,您应采用不同的方法,迭代字符串,如果索引为< n则返回该字符串中的字符,否则返回'*'

>>> def replace(s, n):
...     return ''.join(c if i < n else '*' for i,c in enumerate(s))
...
>>> replace("hello", 2)
'he***'
>>> replace('lalahahalala', 8)
'lalahaha****'

以上是使用for循环而不是生成器表达式的上述版本:

>>> def replace(s, n):
...     char_list = []
...     for i, c in enumerate(s):
...         if i < n:
...             char_list.append(c)
...         else:
...             char_list.append('*')
...     return ''.join(char_list)
...
>>> replace('hello', 2)
'he***'
>>> replace('lalahahalala', 8)
'lalahaha****'
>>>

答案 2 :(得分:0)

replace方法存在根本缺陷,因为replace查找要替换源字符串中任何位置的子字符串,而不是替换某个位置的字符。即使使用&#34;固定&#34; @MiriamFarber的版本(现在他编辑了它,查看修订历史记录)你会得到错误的输出,如

replace("chachacha", 6) # returns *********

您想要的是在请求的位置截断字符串,并在其后面附加一个与您删除的字符一样多的字符串。

def replace(s, n):
    return s[:n] + '*'*(len(s)-n)

答案 3 :(得分:0)

您可以将s切片到n位置,然后使用*运算符连接字符串的其余部分。您不需要使用replace方法:

def replace(s,n):
    return s[:n] + (len(s)-n)*'*'

输出结果为:

replace('hello', 2)
'he***'