替换字符串中的所有非字母字符

-3 投票
3 回答
1450 浏览
提问于 2025-04-30 20:31

这段话的意思是要把所有的数字、特殊字符和不可打印的字符都替换掉。不过,我不能使用 re 这个库。

line = line.rstrip() # this get rids of the white spaces
if character in string.digits or character in string.punctuation:
    line = line.replace(character, "")

但是,这样做并不能去掉 \ 这个字符;我该怎么检查这个字符并把它替换成空的呢?用 character in "\" 这种方式不管用。

暂无标签

3 个回答

1

你应该保护好反斜杠“\”。用“\\”来表示。

1

你只需要用 str.isalpha() 来检查一个字符是不是字母:

>>> st='hsfjebhjbe283628362et#@%\\\\\\\\\\\\\\!!@$*)(|<>~\%^%@%^///;...][]=--]9988bjwqgvs'
>>> ''.join(i for i in st if i.isalpha())
'hsfjebhjbeetbjwqgvs'

如果想检查一个字符是不是字母或数字,可以用 str.isalnum()

>>> ''.join(i for i in st if i.isalnum())
'hsfjebhjbe283628362et9988bjwqgvs'
3

只需要遍历这个字符串,保留所有的字母字符。你可以用列表推导式和连接操作来实现这个。

import string
line = ''.join(c for c in line if c in string.ascii_letters)

不过,如果你想更好地处理unicode字符串,可以使用 isalpha()

>>> line = u'ABcdef124__++--()zyxôôô999٤end'
>>> print(''.join(c for c in line if c.isalpha()))
ABcdefzyxôôôend

这样的话,像 ô(带有抑扬符的拉丁小写字母o)会被保留,但 ٤(阿拉伯数字四)就不会被保留,这样的处理看起来是对的。

撰写回答