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

如何在字符串列表中实现子串部分匹配,检测目标列表是否包含指定关键词

MX记录关键词匹配功能实现方案

核心实现逻辑

需求本质为子串存在性判定,无需对点号、连字符等域名特殊符号做额外处理,只要MX记录中完整包含任意关键词子串即可判定匹配成功。

  • 可选预处理步骤:将所有关键词和MX记录统一转为小写,避免域名大小写差异导致的匹配遗漏
  • 遍历所有MX记录,逐个检查是否包含任意目标关键词
  • 只要存在任意一对匹配直接返回True,全部遍历完成无匹配返回False

基础版代码实现(Python)

def check_mx_keyword_match(keywords: list[str], mx_records: list[str], ignore_case: bool = True) -> bool:
    # 预处理关键词
    processed_keywords = [kw.lower() for kw in keywords] if ignore_case else keywords
    for mx in mx_records:
        current_mx = mx.lower() if ignore_case else mx
        # 检查当前MX是否包含任意关键词
        for kw in processed_keywords:
            if kw in current_mx:
                return True
    return False

# 测试示例
if __name__ == "__main__":
    test_keywords = ["gmail", "google", "outlook"]
    test_mx_list = ["mail.protection.outlook.com", "gmail-smtp.google.com"]
    print(check_mx_keyword_match(test_keywords, test_mx_list)) # 输出结果:True

高并发/大数据量优化方案

如果关键词或MX记录量级超过1000条,普通遍历的O(M*N)时间复杂度(M为MX记录数、N为关键词数)性能较低,可通过AC自动机构建关键词字典树优化,单次匹配复杂度降至O(L)(L为单条MX记录长度),实现示例:

import ahocorasick

def optimized_mx_match(keywords: list[str], mx_records: list[str], ignore_case: bool = True) -> bool:
    # 构建AC自动机
    automaton = ahocorasick.Automaton()
    for idx, kw in enumerate(keywords):
        processed_kw = kw.lower() if ignore_case else kw
        automaton.add_word(processed_kw, (idx, processed_kw))
    automaton.make_automaton()

    for mx in mx_records:
        processed_mx = mx.lower() if ignore_case else mx
        # 存在任意匹配直接返回
        if next(automaton.iter(processed_mx), None) is not None:
            return True
    return False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:45:02