2014-10-31 88 views
-4

即替换所有数字,特殊字符,非打印字符。我无法使用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 "\"不起作用。

+0

可能重复http://stackoverflow.com/questions/12985456/replace-all-non-alphanumeric-characters-in-a-string) – fredtantini 2014-10-31 10:12:16

+1

为什么你不能使用re库?这是一个标准库。这是功课吗? – Joe 2014-10-31 10:12:36

+0

您需要转义反斜杠(因为它通常用于转义其他字符):''\\'' – jonrsharpe 2014-10-31 10:13:41

回答

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)被保留,但٤(阿拉伯文 - 印度文数字FOUR)不,这看起来正确。

1

您应该保护“\”。使用“\\”

+0

另外,我不认为删除“\”是不错的主意,因为它可以保护一些特殊的符号 – serkos 2014-10-31 10:15:23

1

只需使用str.isalpha()来检查字符内是否是字母或不:

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

对于字母数字使用str.isalnum()

>>> ''.join(i for i in st if i.isalnum()) 
'hsfjebhjbe283628362et9988bjwqgvs' 
的[替换字符串中的所有非字母数字字符(
相关问题