2014-02-18 165 views
7

如何替換字符串中的多個字符?如何替換字符串中的多個字符?

請幫忙修復腳本

我需要在該行「名」特殊字符都被替換短語「特殊字符」

newName = replace(name, ['\', '/', ':', '*', '?', '"', '<', '>', '|'], 'special char') 

,但我得到的消息:

無效語法

+0

看看[str.stranslate()](http://docs.python.org/3/library/stdtypes.html?highlight=translate#str.translate) –

+0

無效語法錯誤是來自列表中的第一項:'\'。由於它是一個轉義字符,您需要使用'\\' – Cam

回答

9

您可以使用re.sub()

import re 
newName = re.sub('[\\\\/:*?"<>|]', 'special char', name) 
3

,你可以這樣做:

>>> rep_chars = ['\\', '/', ':', '*', '?', '"', '<', '>', '|'] 
>>> name = "/:*?\"<>name" 
>>> for char in rep_chars: 
...  name = name.replace(char,'') 
... 
>>> name 
'name' 
8

您可以使用str.translatedictionary comprehension

>>> name = ":1?2/3<4|5" 
>>> bad = ['\\', '/', ':', '*', '?', '"', '<', '>', '|'] 
>>> newName = name.translate({ord(c):'special char' for c in bad}) 
>>> newName 
'special char1special char2special char3special char4special char5' 
>>> 

如果使用timeit.timeit,你會看到,這方法通常比其他提供的更快:

>>> from timeit import timeit 
>>> name = ":1?2/3<4|5" 
>>> bad = ['\\', '/', ':', '*', '?', '"', '<', '>', '|'] 
>>> 
>>> timeit("import re;re.sub('[\\/:*?\"<>|]', 'special char', name)", "from __main__ import name") 
11.773986358601462 
>>> 
>>> timeit("for char in bad: name = name.replace(char, 'special char')", "from __main__ import name, bad") 
9.943640323001944 
>>> 
>>> timeit("name.translate({ord(c):'special char' for c in bad})", "from __main__ import name, bad") 
9.48467780122894 
>>> 
+1

更快但可讀性較差。 –

相關問題