【问题标题】:replace all characters in a string with asterisks用星号替换字符串中的所有字符
【发布时间】:2015-11-12 03:56:46
【问题描述】:

我有一个字符串

name = "Ben"

我变成了一个列表

word = list(name)

我想用星号替换列表中的字符。我该怎么做?

我尝试使用.replace 函数,但它过于具体,并没有一次更改所有字符。

我需要一个适用于任何字符串的通用解决方案。

【问题讨论】:

    标签: python string


    【解决方案1】:

    我想用星号替换列表中的字符

    相反,创建一个只有星号的新字符串对象,像这样

    word = '*' * len(name)
    

    在 Python 中,您可以将一个字符串与一个数字相乘以将相同的字符串连接起来。例如,

    >>> '*' * 3
    '***'
    >>> 'abc' * 3
    'abcabcabc'
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式将列表中的字符替换为星号:

      方法一

      for i in range(len(word)):
          word[i]='*'
      

      这种方法更适合 IMO,因为没有使用额外的资源,因为列表的元素实际上被星号“替换”。

      方法二

      word = ['*'] * len(word)
      

      word = list('*' * len(word))
      

      在此方法中,创建一个相同长度(仅包含星号)的新列表并将其分配给“单词”。

      【讨论】:

        【解决方案3】:

        我想用星号替换列表中的字符。我怎样才能 这样做?

        我会从字面上回答这个问题。有时您可能必须将其作为单个步骤执行,尤其是在表达式中使用它时

        您可以利用 str.translate 方法并使用 256 大小的转换表将所有字符屏蔽为星号

        >>> name = "Ben"
        >>> name.translate("*"*256)
        '***'
        

        注意因为字符串是不可变的,它会在改变原来的字符串的内部创建一个新的字符串。

        【讨论】:

          【解决方案4】:

          您可能正在寻找类似的东西?

          def blankout(instr, r='*', s=1, e=-1):
              if '@' in instr:
                  # Handle E-Mail addresses
                  a = instr.split('@')
                  if e == 0:
                      e = len(instr)
                  return instr.replace(a[0][s:e], r * (len(a[0][s:e])))
              if e == 0:
                  e = len(instr)
              return instr.replace(instr[s:e], r * len(instr[s:e]))
          

          【讨论】:

            猜你喜欢
            • 2011-11-11
            • 1970-01-01
            • 2016-08-16
            • 2013-06-27
            • 2018-09-10
            • 2011-07-18
            • 1970-01-01
            • 2018-05-14
            相关资源
            最近更新 更多