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

Python域名列表精确求交集 处理|分隔多域名 规避in/re.search

Python 精确匹配两域名列表公共项实现

问题说明

  • 输入为两个通过readlines()读取域名文件得到的原始列表,基础样例:
a = ['abc.com','cde.com','efg.com']
b = ['yabc.com','cde.com','abce.com','efg.com']
  • 匹配规则:
    • 必须完整精确匹配,禁止部分匹配,上述样例期望输出公共域名为['cde.com','efg.com']
    • 两个列表元素无固定顺序
  • 特殊场景:文件部分行包含多个以|分隔的域名,readlines()会将这类行读取为单个字符串(例如['abc.com|cde.com|efg.com\n','xyz.com']),直接匹配会漏掉拆分后的独立域名
  • 实现约束:禁止使用in、re.search类包含/正则匹配逻辑

实现代码

第一步:编写统一预处理函数

处理换行符、|分隔多域名场景,将原始列表转换为存储单个独立域名的集合,集合的哈希存储特性天然支持精确相等判定,不会出现部分匹配问题:

def clean_raw_domains(raw_lines: list[str]) -> set[str]:
    valid_domains = set()
    for line in raw_lines:
        stripped_line = line.strip()
        if not stripped_line:
            continue
        split_domains = stripped_line.split('|')
        for domain in split_domains:
            d = domain.strip()
            if d:
                valid_domains.add(d)
    return valid_domains

第二步:求精确交集

利用集合的位与运算求交集,运算逻辑基于元素哈希值完全相等判定,完全符合精确匹配要求,不会触发禁止使用的匹配逻辑:

domains_a = clean_raw_domains(a)
domains_b = clean_raw_domains(b)
common_domains = list(domains_a & domains_b)

效果验证

  • 基础样例运行输出为['cde.com', 'efg.com'],完全符合预期
  • 带|分隔多域名、带换行符的原始读取结果,经预处理后会被拆分为独立域名参与匹配,无漏匹配问题
  • 不受列表原始顺序影响,可自动去除单个列表内的重复域名

内容的提问来源于stack exchange,提问作者Mr.V

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:54:18