【问题标题】:How can I replace the letters of a string with underscores? [duplicate]如何用下划线替换字符串的字母? [复制]
【发布时间】:2015-10-06 01:02:04
【问题描述】:

我正在尝试抓取字符串中的字母并将它们替换为空格,在这种情况下,空格由“_”表示,每个下划线之间都有一个空格。

这是我的代码:

word = "my example"
def convert_letter(word):
    for i in range(0, len(word)):
        if ord(word[i]) != 32:
            word.replace(word[i], '_')
    print(word)
convert_letter(word)

当我运行代码时,它只返回单词或字符串,我不知道为什么。

以防万一您想知道 if 语句的目的是为了不将空格转换为“_”。

所以在这个函数的情况下,我期待以下:

_ _  _ _ _ _ _ _ _

【问题讨论】:

  • 使用re.replace,更简单
  • 你能edit你的问题并添加一个示例输出示例吗?
  • 我已经阅读了您的 cmets,我认为您应该说明您的问题。你说这是为了一个刽子手游戏。本质上,您需要与字母一样多的下划线。为此,例如根本不需要替换任何东西:)

标签: python


【解决方案1】:

您的代码中的问题是str.replace 没有就地修改字符串,而是返回完成替换的副本。如果要替换原始字符串,则必须将其分配回去

word = word.replace(word[i], '_')

确保您了解您正在使用的部分,如果您从一个简单的程序开始,您会发现替换没有按预期执行

w = 'abc'
w.replace('a', 'x') # should be w = w.replace(...)
print(w) # prints 'abc'

如果我从字面上理解您的问题的标题,您只想将字母替换为下划线。这将使所有特殊字符和数字保持不变。在这种情况下,您可以使用string.ascii_lettrsjoin

def convert_letter(word):
    ''.join('_' if c in string.ascii_letters else c for c in word)

正如您在其他 cmets 中所说的那样,您实际上希望下划线之间有一个空格,如果是这种情况,请改用 ' '.join

【讨论】:

    【解决方案2】:

    试试

    new_word = word.replace(word[i], '_ ')
    

    来自string.replace() 的文档:它返回字符串 s 的副本,其中所有出现的子字符串 old 都替换为 new。

    word = "my example"
    
    def convert_letter(word):
        new_word = word
        for i in range(0, len(word)):
            if ord(word[i]) != 32:
                new_word = new_word.replace(word[i], '_ ')
        print(new_word)
    convert_letter(word)
    

    【讨论】:

    • 它工作了,现在我唯一的问题是它将所有空格作为一个返回,所以它看起来像这样:__ ________ 而不是每个下划线之间有一个空格。
    • 你希望你的输出是什么?
    • 我不想将它们全部放在一起,而是希望每个“_”之间有一个空格,所以它看起来像这样:_ _ _ _ _ _ _ _ _。这是一个刽子手游戏,所以必须清楚这个词有多少个字符。相反,我将每个下划线放在一起,这使得每个单词看起来像一个大的空行。
    • 快到了。现在每个“_”之间确实有空格,但由于某种原因,它没有将每个字母都转换为下划线。所以它给了我以下结果:_ _ _ _ _ _ pl _。
    • @Sebastian 应该修复它
    【解决方案3】:

    如果你想走正则表达式路线:

    import re
    
    word = "my example"
    word = re.sub('\w', '_ ', word)
    

    根据您要替换的具体内容,您可能需要更改正则表达式。例如,\w 包含数字,因此您可能需要 [A-Za-z]

    注意,和str.replace()一样,它也不会修改原文。

    【讨论】:

      猜你喜欢
      • 2020-12-22
      • 2018-11-25
      • 2016-10-13
      • 1970-01-01
      • 2012-03-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      • 1970-01-01
      相关资源
      最近更新 更多