You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用匹配字典替换字符串含数字指定部分(不替换#SUP值)

高效实现方法

可以通过分割字符串+正则替换的方式高效完成需求,核心思路是把需要替换的规则部分和不需要替换的元数据部分(#SUP及之后内容)分开处理,避免误替换元数据里的数字:

实现代码

import re

d = {7: 'mandat_dépôt', 46: 'battu', 79: 'alphabétisé', 127: 'escrime', 160: 'daara', 162: 'arrivée_foyer', 169: 'fugue', 170: 'né_légitimement'}

def replace_nums(s):
    # 分割规则部分和元数据部分
    rule_part, meta_part = s.split('#SUP: ', 1)
    # 正则匹配规则里的数字,替换为字典对应值
    replaced_rule = re.sub(r'\d+', lambda m: d.get(int(m.group()), m.group()), rule_part)
    # 拼接结果
    return f"{replaced_rule.strip()} #SUP: {meta_part}"

# 测试示例
s_list = [
    "7 ==> 127 #SUP: 41 #CONF: 0.8723404255319149",
    "46 ==> 162,169 #SUP: 39 #CONF: 0.8478260869565217",
    "46,169 ==> 162 #SUP: 39 #CONF: 0.975",
    "160,169 ==> 79,162 #SUP: 40 #CONF: 0.7692307692307693",
    "160,162,170 ==> 79 #SUP: 39 #CONF: 0.8125"
]

for s in s_list:
    print(replace_nums(s))

代码说明

  • 分割字符串:用split('#SUP: ', 1)把字符串拆成规则部分(==>前后的内容)和元数据部分(#SUP及之后的数值),确保元数据里的数字完全不参与替换。
  • 正则替换:用re.sub匹配规则部分里的所有数字,通过lambda回调函数从字典中取出对应值替换;如果数字不在字典中(题目中不存在这种情况),则保留原数字。
  • 拼接结果:把处理后的规则部分和原元数据部分重新拼接,保持原格式。

这种方法只遍历字符串两次(分割+正则替换),时间复杂度为O(n),处理大量字符串时效率很高,同时精准避免了替换#SUP后的数值。

内容的提问来源于stack exchange,提问作者Erwin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 15:40:27