Python 3 中 str.translate 的自定义表

Nec*_*ron 3 python string replace

如果我运行此代码:

s.translate(str.maketrans({'as': 'dfg', '1234': 'qw'}))
Run Code Online (Sandbox Code Playgroud)

我会得到:

ValueError: string keys in translate table must be of length 1
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 一次替换多个字符str.translate?文档说我可以使用codecs灵活的方法,但我不知道如何使用。

如果不是,那么可以做些什么呢?

Gia*_*tta 5

没有str.translate单独用于替换单个字符。替换字符串可以是任意长度,但必须是单个字符。


当他们的文档提到codecs他们说您可以实现自定义编码,注册它然后使用它打开文件......这不是调用类似的问题codecs.maketrans,这是相当多的工作。我个人会使用re.sub函数替换:

replacements = {'as': 'dfg', '1234': 'qw'}
re.sub('({})'.format('|'.join(map(re.escape, replacements.keys()))), lambda m: replacements[m.group()], text)
Run Code Online (Sandbox Code Playgroud)

这似乎做你想做的事:

>>> re.sub('({})'.format('|'.join(map(re.escape, replacements.keys()))), lambda m: replacements[m.group()], "test as other test1234")
'test dfg other testqw'
Run Code Online (Sandbox Code Playgroud)