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

如何用str.contains()过滤.co.类TLD网站?现有方法失效原因及解决方案

问题原因与解决方案:过滤特定二级域名后缀的网站

为什么你的方法失效?

正则表达式中的.默认匹配任意单个字符,这是核心问题:

  • 直接用'.co.'时,未转义的两个.会匹配任意字符,比如.com里co后面的m会被第二个.匹配,导致.com被误判为符合条件,最终被过滤。
  • 即便转义成'\.co\.'(或未加原始字符串前缀的'\\.co\\.'),如果转义操作有误(比如只转义了前一个.,没转义后一个),第二个.依然会匹配任意字符,还是会把.com包含进匹配结果。

更优解决方案

要精准过滤.co.uk、.co.at这类co作为二级后缀的域名,同时保留.com、.co,可以用锚定结尾的正则表达式,确保只匹配co后面跟着另一个后缀的情况:

方案1:匹配纯域名结尾的.co.xx模式

如果Website字段存储的是无路径的纯域名,用这个正则:

df_filtered = df.loc[~df['Website'].str.contains(r'\.co\.[a-z]{2,}$', case=False)]

正则说明:

  • r'\.co\.':用原始字符串r避免转义混乱,匹配字面意义的.co.
  • [a-z]{2,}:匹配至少2个字母的顶级域名(如uk、at)
  • $:锚定字符串结尾,确保这是域名的最后部分
  • case=False:兼容大写域名(如.CO.UK)

方案2:兼容带路径的完整URL

如果Website包含完整URL(比如https://example.co.uk/page1),调整正则匹配.co.xx后面跟着斜杠或结尾:

df_filtered = df.loc[~df['Website'].str.contains(r'\.co\.[a-z]{2,}(?:/|$)', case=False)]

(?:/|$)表示匹配斜杠或字符串结尾,避免误匹配路径中出现的.co.(比如https://example.com/co.uk/)。

方案3:拆分域名(需额外库支持)

如果需要更严谨的域名解析,可使用tldextract库提取后缀:

import tldextract

def should_filter(url):
    ext = tldextract.extract(url)
    # 过滤二级后缀为co的情况(如co.uk、co.at)
    return ext.suffix.split('.')[0] == 'co'

df_filtered = df[~df['Website'].apply(should_filter)]

这个方法不受URL格式影响,解析更准确,但需先安装库:pip install tldextract

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:57:38