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

在R中按字符串列表过滤数据框:筛选含指定后缀的邮箱记录

过滤邮箱地址匹配指定后缀的解决方案

问题原因

你之前的两种方法失效的核心原因:

  • endsWith的suffix参数仅支持单个字符串,传入向量时只会匹配第一个后缀,不会遍历所有选项。
  • str_ends传入向量pattern时,会按位置一对一匹配(第N个邮箱匹配第N个后缀),而非对每个邮箱检查所有后缀。

可行解决方案

方案1:正则表达式匹配(高效推荐)

把所有后缀合并成一个正则表达式,用str_detect配合结尾锚点$实现任意后缀匹配,同时处理.这类正则特殊字符:

library(dplyr)
library(stringr)

# 将后缀转为正则安全的模式,合并为"后缀1|后缀2|..."格式
ext_pattern <- str_c(
  str_replace_all(extensions, "\\.", "\\\\."),  # 转义点号
  collapse = "|"
)

# 过滤数据框,只保留匹配任意后缀结尾的邮箱
df_filtered <- df %>%
  filter(str_detect(email, str_c("(", ext_pattern, ")$")))

方案2:遍历检查(直观易理解)

用purrr::map_lgl对每个邮箱逐一检查是否存在匹配的后缀,无需处理正则:

library(dplyr)
library(purrr)

df_filtered <- df %>%
  filter(map_lgl(email, ~ any(endsWith(.x, extensions))))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:16:12