我试图抓住字符串中的字母并用空格替换它们,在这种情况下,空格由" _"表示。每个下划线之间有一个空格。
这是我的代码:
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语句的目的是什么,以至于它没有将空格转换为" _"。
所以在这个函数的情况下,我期待以下内容:
_ _ _ _ _ _ _ _ _
答案 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_lettrs
和join
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()
类似,它也不会修改原始内容。