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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |