如何用下划线替换字符串的字母?

时间:2015-10-06 01:02:04

标签: python

我试图抓住字符串中的字母并用空格替换它们,在这种情况下,空格由" _"表示。每个下划线之间有一个空格。

这是我的代码:

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语句的目的是什么,以至于它没有将空格转换为" _"。

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

_ _  _ _ _ _ _ _ _

3 个答案:

答案 0 :(得分:2)

代码中的问题是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)

正如您在其他评论中所述,您实际上希望下划线之间有空格,如果是这种情况,则使用' '.join代替

答案 1 :(得分:0)

尝试

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)

答案 2 :(得分:0)

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

import re

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

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

请注意,与str.replace()类似,它也不会修改原始内容。