加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 错误的字符串替换版本

发布时间:2020-12-20 11:09:18 所属栏目:Python 来源:网络整理
导读:参见英文答案 Replacing multiple similar strings????????????????????????????????????1个 ???????????? How to replace two things at once in a string?????????????????????????????????????6个 ???????????? How to replace multiple substrings of a
参见英文答案 > Replacing multiple similar strings????????????????????????????????????1个
>???????????? How to replace two things at once in a string?????????????????????????????????????6个
>???????????? How to replace multiple substrings of a string?????????????????????????????????????19个
我陷入了一个非常直接的问题,但经过一些调整后,我根本找不到一个简单有效的算法来做到这一点.

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

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

还有一张地图:

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

我想做以下的事情:

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

所以我期待的是:

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

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

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

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

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

因为长度不固定,上面的代码仍然是错误的.

我清楚这个吗?任何建议将非常感激!

=======更新

因此所有键都遵循%[0-9]的这种模式.

解决方法

你可以使用带有lambda的re.sub:

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

输出:

'test %33,%17'

如果_dict中没有键,则可以使用dict.get通过提供默认值来防止KeyError:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读