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

如何实现字符串匹配双常量,让First Team与First-Team均判定为CHOICE_B?

实现方案

最佳实践是将匹配逻辑统一封装在SomeChoices类内部,保证所有调用方使用一致的比对规则,避免逻辑分散导致的规则不一致问题。

基础实现(仅满足当前需求)

class SomeChoices(object):
    CHOICE_A = "Sub"
    CHOICE_B = "First Team"

    @classmethod
    def choices(cls):
        return cls.CHOICE_A, cls.CHOICE_B

    @classmethod
    def is_match_choice_b(cls, input_str: str) -> bool:
        # 对输入做归一化处理:替换连字符为空格,去除两端空白
        normalized_input = input_str.strip().replace('-', ' ')
        return normalized_input == cls.CHOICE_B

业务侧直接调用即可:

# 调用示例
print(SomeChoices.is_match_choice_b("First Team")) # True
print(SomeChoices.is_match_choice_b("First-Team")) # True
print(SomeChoices.is_match_choice_b("Sub")) # False

可扩展实现(适配后续同类需求)

如果后续其他选项也需要类似的多格式匹配需求,可以抽离通用归一化逻辑,方便扩展:

class SomeChoices(object):
    CHOICE_A = "Sub"
    CHOICE_B = "First Team"

    @classmethod
    def choices(cls):
        return cls.CHOICE_A, cls.CHOICE_B

    @classmethod
    def _normalize(cls, s: str) -> str:
        """统一字符串归一化规则,可根据需求新增替换规则、大小写转换等"""
        return s.strip().replace('-', ' ')

    @classmethod
    def match_choice(cls, input_str: str):
        """匹配所有选项,匹配成功返回对应常量值,失败返回None"""
        normalized_input = cls._normalize(input_str)
        for choice in cls.choices():
            if cls._normalize(choice) == normalized_input:
                return choice
        return None

调用示例:

print(SomeChoices.match_choice("First Team") == SomeChoices.CHOICE_B) # True
print(SomeChoices.match_choice("First-Team") == SomeChoices.CHOICE_B) # True
print(SomeChoices.match_choice("Sub") == SomeChoices.CHOICE_A) # True

方案优势

  • 规则收敛:所有匹配逻辑统一维护在常量类中,不会出现不同业务场景比对逻辑不一致的问题
  • 易扩展:后续需要新增匹配规则(如支持下划线、大小写不敏感)时,仅需要修改_normalize方法一处即可
  • 可读性强:业务侧调用语义清晰,不需要理解底层匹配规则即可直接使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:54:04