python - 字符串替换的无错误版本

标签 python string algorithm substitution

<分区>

我陷入了一个非常直接的问题,但经过一些调整后,我根本找不到一个简单有效的算法来解决这个问题。

所以基本上我有一个字符串,其中包含某些元素,例如:

l = "test %1, %13, %14, %15"

还有一张 map :

dict = {"%1": "%33", "%13": "%14", "%14", "%15", "%15": "%17"}

我想做以下事情:

for k in dict.keys():
    l = l.replace(k, dict[k])

所以我期待的是:

l = "test %33, %14, %15, %17"

但显然这是不可行的,因为键和值之间存在一些冲突。所以上面的代码会输出:

l = "test %33, %17, %17, %17"

很抱歉出现这样的本地问题,但我应该如何解决这个问题并获得预期的输出?请注意,每个键/值的长度不是固定的,所以我不能做类似的事情:

m_idx = l_copy.find(key)
l = l[:m_idx] + dict[key] + l[m_idx+len(key):]

由于长度不固定,上面的代码还是有bug。

我清楚了吗?任何建议将不胜感激!

=======更新

所以所有的键都遵循这种 %[0-9]+ 的模式。

最佳答案

您可以将 re.sublambda 一起使用:

import re
l = "test %1, %13, %14, %15"
_dict = {"%1": "%33", "%13": "%14", "%14":"%15", "%15": "%17"}
new_l = re.sub('%\d+', lambda x:_dict[x.group()], l)

输出:

'test %33, %14, %15, %17'

如果 key 不在 _dict 中,您可以使用 dict.get 通过提供默认值来防止 KeyError:

new_l = re.sub('%\d+', lambda x:_dict.get(x.group(), x.group()), l)

关于python - 字符串替换的无错误版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260138/

相关文章:

Java: "myString[hey, there]"到 HashSet?

php - 将中缀表达式转换为 Elasticsearch 查询

algorithm - 将网格中按顺序分配的数字转换为 x-y 坐标

python - 意外的输出结果

python - 如何在 Python 中动态定义类型/类?

python - 实时向 matlibplot 散点图添加点

python - 计算每个标记在 DataFrame 的每行中出现的次数

反转字符串的 C 代码 - 包括字符串末尾的 NULL 字符

c# - 如何去掉字符串中的\r\n

javascript - 算法:Next Greater Element I(来自 leetcode)