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

如何实现字符串与含%通配符列表的非匹配校验?

问题与代码修正

需求说明

给定列表 newlist = ['test', '%ing', 'osh', '16fg'] 和目标字符串 tartext = 'Singing',需校验目标字符串是否与列表中所有元素都不匹配:

  • 普通元素执行等值匹配
  • 含%的元素按SQL通配符规则处理(%匹配任意长度的任意字符)
  • 返回规则:目标字符串不匹配列表中任何元素时返回True;只要匹配其中一个元素,就返回False
  • 示例:Singing匹配%ing,应返回False

原代码问题

原代码逻辑完全颠倒,且循环过早返回:

  • 原逻辑中,只要遇到一个不匹配的元素就直接返回True,与需求完全相反
  • 没有正确实现「只要匹配任一元素就返回False」的核心逻辑

修正后的代码

import re

newlist = ['test', '%ing', 'osh', '16fg']
tartext = 'Singing'

def wildcard_compare(string, match):
    # 将SQL%通配符转换为正则表达式的.*,匹配整个字符串
    match_pattern = match.replace('%', '.*')
    return bool(re.fullmatch(match_pattern, string))

def condition_match(lookupstring, mylist):
    for value in mylist:
        if '%' in value:
            if wildcard_compare(lookupstring, value):
                # 匹配到通配符规则,直接返回False
                return False
        else:
            if value == lookupstring:
                # 等值匹配成功,直接返回False
                return False
    # 遍历完所有元素均无匹配,返回True
    return True

# 测试用例
print(condition_match(tartext, newlist))  # 输出:False(Singing匹配%ing)
print(condition_match('BO_IN', ['AP_IN','BO_IN','CA_PS']))  # 输出:False(BO_IN在列表中)
print(condition_match('Unknown', newlist))  # 输出:True(无匹配项)

修正要点

  1. 调整核心逻辑:遍历列表时,只要找到匹配项就立即返回False
  2. 仅当所有元素都不匹配时,才返回True
  3. 保留正确的通配符转正则逻辑,确保%ing能匹配任意以ing结尾的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:00:05