2014-02-18 2 views
7

Как заменить несколько символов в строке?Как заменить несколько символов в строке?

пожалуйста, помогите исправить сценарий

Мне нужно в строке «название» специальные символы были заменены фразой «специальный полукокса»

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

, но я получаю сообщение:

недопустимый синтаксис

+0

посмотреть на [str.stranslate()] (http://docs.python.org/3/library/stdtypes.html?highlight=translate#str.translate) –

+0

инвалиду ошибка синтаксиса начиная с первого элемента в вашем списке: '\'. Так как это escape-символ, вам нужно использовать '\\' – 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.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 
>>> 
+1

Быстрее, но менее читаемым. –

Смежные вопросы