如何在字符串列中检测是否同时包含medication和infant两个词?
在字符串列中筛选同时包含指定两个词的行
首先构造示例数据:
library(dplyr) library(stringr) df <- tibble( ID = c(1, 2, 3), Col1 = c("Quick Brown fox medication", "Brown fox infant", "Quick medication fox infant") )
方法1:使用str_detect结合逻辑与(&)
你之前尝试str_detect未成功,大概率是没同时对两个关键词做检测并取交集。可以分别检测两个词的存在,再用&确保两个条件同时满足:
result <- df %>% filter(str_detect(Col1, "medication") & str_detect(Col1, "infant"))
方法2:使用正则表达式正向预查
如果想用单个正则表达式实现,可利用正向预查语法,确保两个词都存在(词的顺序不影响):
result <- df %>% filter(str_detect(Col1, "(?=.*medication)(?=.*infant)"))
两种方法都会得到预期结果:
# 输出结果 result #> # A tibble: 1 × 2 #> ID Col1 #> <dbl> <chr> #> 1 3 Quick medication fox infant
说明:
str_detect默认匹配字符串任意位置的子串,无需额外处理词的位置- 正则方法里的
(?=.*xxx)是正向预查,含义是“字符串中存在xxx子串”,多个预查组合即可要求同时满足所有条件
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

