如何在字符串中替换多个字符?

9

如何替换字符串中的多个字符?

请帮忙修复脚本。

我需要在“name”行中将特殊字符替换为短语“special char”。

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

但是我收到的信息是:

语法无效


请查看str.stranslate() - Fredrik Pihl
无效的语法错误来自于你列表中的第一项:''。由于它是一个转义字符,因此您需要使用'\'。 - Cam
3个回答

15
你可以使用 re.sub():
import re
newName = re.sub('[\\\\/:*?"<>|]', 'special char', name)

11

您可以使用 str.translate字典推导式

>>> 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
>>>

3
您可以这样做:
>>> rep_chars = ['\\', '/', ':', '*', '?', '"', '<', '>', '|']
>>> name = "/:*?\"<>name"
>>> for char in rep_chars:
...     name = name.replace(char,'')
...
>>> name
'name'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接