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

Python regex模块:从模糊匹配中获取原始未模糊匹配内容

解决模糊匹配后无法查找对象的问题

核心问题在于你当前是提取用户的错误输入文本去查字典,正确的思路应该是将用户输入与字典中的键做模糊匹配,找到最接近的正确键,而非用错误输入直接查询。以下是两种实用的实现方式:

方案一:用编辑距离筛选最优匹配键

借助Python标准库difflib的get_close_matches,可以快速找到与用户输入最相似的字典键,适合不需要复杂正则规则的场景:

import difflib

# 示例对象字典(动态增减都不影响)
objects = {"34.5": "虚拟世界中的34.5对象", "apple": "苹果道具", "banana": "香蕉道具"}
user_input = "345"

# 获取最匹配的键,cutoff控制匹配阈值(0-1,值越低匹配越宽松)
matches = difflib.get_close_matches(user_input, objects.keys(), n=1, cutoff=0.6)
if matches:
    target_key = matches[0]
    # 用正确的键查找对象
    target_object = objects[target_key]
    print(f"匹配到对象:{target_object}")
else:
    print("未找到匹配的对象")

方案二:结合regex反向模糊匹配键

如果你必须使用regex模块的模糊匹配能力,可以将字典中的每个键作为匹配模式,反向匹配用户输入,直接拿到正确的键:

import regex

objects = {"34.5": "虚拟世界中的34.5对象", "apple": "苹果道具", "banana": "香蕉道具"}
user_input = "345"

target_key = None
# 遍历所有对象键,查找模糊匹配成功的项
for key in objects.keys():
    # max_edit_distance允许的最大编辑错误次数(插入/删除/替换)
    if regex.fullmatch(key, user_input, fuzzy=True, max_edit_distance=1):
        target_key = key
        break

if target_key:
    target_object = objects[target_key]
    print(f"匹配到对象:{target_object}")
else:
    print("未找到匹配的对象")

这两种方案都能适配对象动态增减的场景,因为每次匹配都会遍历当前字典的所有键,避免了用错误输入触发KeyError的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 14:46:15