2014-10-31 89 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' 
的[替換字符串中的所有非字母數字字符(
相關問題