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

多词字符串与单词数组的匹配检测及匹配类型判定优化

多场景字符串匹配类型检测优化实现

需求说明

需检测目标字符串数组与固定单词数组的匹配关系,匹配类型分为以下四种(按优先级排序):

  • 单词精确匹配:目标字符串为单个单词,与固定数组中某单词完全一致(大小写不敏感)
  • 单词部分匹配:目标字符串为单个单词,与固定数组中某单词存在互相包含的部分匹配(大小写不敏感)
  • 多词含精确匹配单词:目标字符串包含多个单词,其中至少一个单词与固定数组中某单词完全一致(大小写不敏感)
  • 多词含部分匹配单词:目标字符串包含多个单词,其中至少一个单词与固定数组中某单词存在互相包含的部分匹配(大小写不敏感)

原有代码问题分析

  1. 使用列表推导式判断匹配存在性时会生成完整列表,效率低下,改用短路求值逻辑更高效
  2. 缺失第四种匹配类型的检测逻辑
  3. 重复调用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))

代码优化点

  1. 提前将固定单词数组转换为小写列表,减少重复的大小写转换操作,提升性能
  2. 采用短路求值逻辑,一旦找到匹配立即返回结果,无需遍历全部元素
  3. 明确区分单词/多词场景,逻辑层级清晰,严格遵循匹配优先级

输出结果

运行代码后将输出:

单词精确匹配
单词部分匹配
多词含精确匹配单词
多词含部分匹配单词

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:01:22