替换字符串中的所有非字母字符
这段话的意思是要把所有的数字、特殊字符和不可打印的字符都替换掉。不过,我不能使用 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)会被保留,但 ٤
(阿拉伯数字四)就不会被保留,这样的处理看起来是对的。