2014-09-30 73 views
0

我有一个列表项,我已经转换成字符串\ T:删除 XA0, n,从Python字符串

[u'\n      Door:\xa0Novum   \t  '] 

我需要删除一切,让林留下

Door:Novum 

我已经尝试了各种方法:

string = string.replace("\xa0", "") 
string.rstrip('\n') 
string.translate(string.maketrans("\n\t", "")) 

我明明做错事,但无法弄清楚什么

+0

字符串是不可变的.'strip'方法不会更改原始字符串。 – vaultah 2014-09-30 17:55:32

+1

那么,你是否收到错误信息,或者是什么? – Kevin 2014-09-30 17:56:22

+0

不,没有任何反应 – Zlo 2014-09-30 17:57:11

回答

4

您需要存储返回值;字符串是不可变的,所以方法返回一个新的字符串与应用的更改。

可以转换为所有这些字符,但使用unicode形式的方法:

toremove = dict.fromkeys((ord(c) for c in u'\xa0\n\t ')) 
outputstring = inputstring.translate(toremove) 

我假设你想摆脱的空间为好。

演示:

>>> inputstring = u'\n      Door:\xa0Novum   \t  ' 
>>> toremove = dict.fromkeys((ord(c) for c in u'\xa0\n\t ')) 
>>> outputstring = inputstring.translate(toremove) 
>>> outputstring 
u'Door:Novum' 

更好的方法仍然是使用str.split(),然后再加入:

outputstring = u''.join(inputstring.split()) 

\xa0,空格,制表符和换行符都包含在什么str.split()将各执,以及回车。

演示:

>>> u''.join(inputstring.split()) 
u'Door:Novum' 

这是更好,因为它是这个工作比使用str.translate()一个很多更快!

>>> import timeit 
>>> timeit.timeit('inputstring.translate(toremove)', 'from __main__ import inputstring, toremove') 
3.4527599811553955 
>>> timeit.timeit('u"".join(inputstring.split())', 'from __main__ import inputstring') 
0.5409181118011475 
+0

工作,谢谢 – Zlo 2014-09-30 18:08:30