我有一个字符串替换列表。每次替换都是琐碎的(常量表达式),但是列表中可能包含替换冲突,如下所示:
reps = {
'a': 'b',
'b': 'c',
'c': 'a',
}
所以我希望字符串grab my cat
变成grbc my abt
。
但是,如果我进行过幼稚的连续替换,例如
,我将不会成功。for pre, post in reps.items():
string.replace(pre, post)
,因为发生冲突。例如,在这里我将得到graa my aat
。
在python中是否有一种标准的方法来执行此操作,同时避免了处理冲突的样板?像string.multiple_replace(reps)
一样?
还是我需要自己观看冲突?
注意:我知道,在pre
条件重叠的情况下,上述逻辑包含未解决的问题。 reps
实际上是有序的(自python 3.8
起),或者可以视为[('a', 'b'), ('b', 'c'), ('c', 'a')]
来优先考虑替换并解决歧义。
更多说明:
我还知道,this solution涉及使用"%temp%"
之类的临时缓冲区是传统的处理方式。但是:
"%temp%"
的攻击字符串。reps
中的每个基本替换执行一次或两次替换操作,如果替换次数很多或字符串很长,这将是令人遗憾的。因此,这种传统技巧还不够,需要更加谨慎地解决问题。
我想知道的是python是否提供标准,快速和强大的解决方案。
答案 0 :(得分:2)
假设单个字符更改,请使用str.translate
(对于python 3):
>>> str.translate('grab my cat', str.maketrans(reps))
'grbc my abt'