多词字符串与单词数组的匹配检测及匹配类型判定优化
多场景字符串匹配类型检测优化实现
需求说明
需检测目标字符串数组与固定单词数组的匹配关系,匹配类型分为以下四种(按优先级排序):
- 单词精确匹配:目标字符串为单个单词,与固定数组中某单词完全一致(大小写不敏感)
- 单词部分匹配:目标字符串为单个单词,与固定数组中某单词存在互相包含的部分匹配(大小写不敏感)
- 多词含精确匹配单词:目标字符串包含多个单词,其中至少一个单词与固定数组中某单词完全一致(大小写不敏感)
- 多词含部分匹配单词:目标字符串包含多个单词,其中至少一个单词与固定数组中某单词存在互相包含的部分匹配(大小写不敏感)
原有代码问题分析
- 使用列表推导式判断匹配存在性时会生成完整列表,效率低下,改用短路求值逻辑更高效
- 缺失第四种匹配类型的检测逻辑
- 重复调用
lower()方法,未做预处理优化
优化实现代码
# 目标字符串数组 target_strings = ['1234','tes','1234 abc','tes abc'] # 固定单词数组 word_list = ['1234','testing12','test'] # 预处理固定单词的小写版本,避免重复转换 lower_words = [word.lower() for word in word_list] def determine_match_type(s): s_lower = s.lower() is_single_word = len(s_lower.split()) == 1 if is_single_word: # 单词精确匹配 if s_lower in lower_words: return '单词精确匹配' # 单词部分匹配:互相包含 for word in lower_words: if s_lower in word or word in s_lower: return '单词部分匹配' else: s_words = s_lower.split() # 多词含精确匹配单词 for sw in s_words: if sw in lower_words: return '多词含精确匹配单词' # 多词含部分匹配单词 for sw in s_words: for word in lower_words: if sw in word or word in sw: return '多词含部分匹配单词' return '无匹配' # 执行检测并输出结果 for s in target_strings: print(determine_match_type(s))
代码优化点
- 提前将固定单词数组转换为小写列表,减少重复的大小写转换操作,提升性能
- 采用短路求值逻辑,一旦找到匹配立即返回结果,无需遍历全部元素
- 明确区分单词/多词场景,逻辑层级清晰,严格遵循匹配优先级
输出结果
运行代码后将输出:
单词精确匹配 单词部分匹配 多词含精确匹配单词 多词含部分匹配单词
内容的提问来源于stack exchange,提问作者Chrisvdberge
相关产品推荐
相关产品推荐

