如何替換字符串中的多個字符?如何替換字符串中的多個字符?
請幫忙修復腳本
我需要在該行「名」特殊字符都被替換短語「特殊字符」
newName = replace(name, ['\', '/', ':', '*', '?', '"', '<', '>', '|'], 'special char')
,但我得到的消息:
無效語法
如何替換字符串中的多個字符?如何替換字符串中的多個字符?
請幫忙修復腳本
我需要在該行「名」特殊字符都被替換短語「特殊字符」
newName = replace(name, ['\', '/', ':', '*', '?', '"', '<', '>', '|'], 'special char')
,但我得到的消息:
無效語法
您可以使用re.sub():
import re
newName = re.sub('[\\\\/:*?"<>|]', 'special char', name)
,你可以這樣做:
>>> rep_chars = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
>>> name = "/:*?\"<>name"
>>> for char in rep_chars:
... name = name.replace(char,'')
...
>>> name
'name'
您可以使用str.translate
和dictionary 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
>>>
更快但可讀性較差。 –
看看[str.stranslate()](http://docs.python.org/3/library/stdtypes.html?highlight=translate#str.translate) –
無效語法錯誤是來自列表中的第一項:'\'。由於它是一個轉義字符,您需要使用'\\' – Cam