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
相关产品推荐
相关产品推荐

