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

如何用str_detect在R中筛选同时包含两个字符串的行?

用str_detect实现同时匹配多个字符串的逻辑与筛选

当然可以实现你要的逻辑与筛选,这里提供两种常用方法:

方法1:多次调用str_detect并用逻辑与连接

直接分别检查name列是否包含"won"和"le",再用&(逻辑与)连接两个条件,只有同时满足两个匹配的行才会被保留:

library(dplyr)
library(stringr)

# 你的实际数据
df <- data.frame(
  name = c("Cathy le", "won Xion le", "Matt le won", "stephen won", "James Matt"),
  value = 5:9
)

# 筛选同时包含"won"和"le"的行
filtered_df <- df %>% 
  filter(str_detect(name, "won") & str_detect(name, "le"))

# 查看结果
filtered_df

执行后输出符合预期:

name value
1 won Xion le     6
2 Matt le won     7

方法2:使用正则表达式的正向预查

如果你想在单个str_detect调用里实现,可以利用正则的正向预查语法(?=.*匹配内容),多个预查条件并列就表示同时满足所有匹配:

filtered_df <- df %>% 
  filter(str_detect(name, "(?=.*won)(?=.*le)"))

这个正则的意思是:字符串中必须存在任意字符(.*)后跟"won",同时也必须存在任意字符后跟"le",顺序不影响匹配结果,刚好符合你的需求。

为什么之前的won|le不行?

|在正则里是逻辑或,只要字符串包含"won"或者"le"就会被选中,所以会把只含其中一个的行也筛选出来,而我们需要的是同时包含两者的逻辑与,因此需要用上述两种方法实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:25:28