如何使用isalpha()用空格替换非字母字符?

时间:2018-05-19 22:28:09

标签: python

我正在尝试检查并查看给定字符串中的每个字符是否都是字母。如果不是,则用空格替换字符。到目前为止我所拥有的是:

def removePunctuation(txt):

    for char in txt:
        if char.isalpha() == False:
            txt.replace(char, " ")
    return txt

我测试了一些输入,但它没有删除任何内容。

3 个答案:

答案 0 :(得分:4)

Python方式:

使用join()generator expression之类的:

new_txt = ''.join(c if c.isalpha() else ' ' for c in txt)

为什么我的代码不起作用?

代码的基本问题是Python字符串是不可变的。也就是说,一旦建成,它们就永远不会改变。您可以丢弃它们,因为您已完成它们,但您无法更改它们。因此.replace()不会更改txt。做的是返回一个替换了字符的新字符串。在你构建的循环中,这根本不是你想要的。

答案 1 :(得分:0)

使用str.translatedefaultdict是解决翻译问题的好方法。

from collections import defaultdict
from string import ascii_letters

translation = defaultdict(lambda: ' ', str.maketrans(ascii_letters, ascii_letters))

print('Hello.World!'.translate(translation))

答案 2 :(得分:0)

使您的功能正常工作所需的最小更改是:

foo

字符串是不可变的,因此def removePunctuation(txt): for char in txt: if char.isalpha() == False: txt = txt.replace(char, " ") return txt new_txt = removePunctuation(txt) 改变其参数,但返回一个新字符串。

然而,Stephen Rauch的单行是一种更“Python”的方式来实现这一目标。

str.replace