如何在R语言grepl函数中同时匹配多个指定关键词
错误原因
你之前的代码错误点有两个:
- 直接把带逗号的关键词拼接串作为匹配规则,
grepl会将其视为完整的单匹配字符串,你的向量中没有元素包含这个带逗号的长串,自然返回全FALSE - 原生
grepl不直接支持「同时匹配多个关键词」的逻辑,需要额外处理匹配规则
正确实现方法
方法1:使用正向先行断言正则(代码更简洁)
利用Perl正则的正向先行断言规则,要求字符串同时命中所有关键词,代码如下:
# 定义待匹配的关键词向量 keywords <- c("recherche", "impliquant", "personne", "humaine", "3") # 构造匹配规则:要求同时包含所有关键词 pattern <- paste0("(?=.*", paste(keywords, collapse = ")(?=.*"), ")") # 执行匹配,注意开启perl支持和忽略大小写 grepl(pattern, a, ignore.case = TRUE, perl = TRUE)
运行输出:
[1] TRUE TRUE FALSE
和你的预期结果完全一致。
方法2:循环判断后取逻辑与(可读性更高)
如果不熟悉正则语法,可以先逐个判断每个关键词的命中情况,再对每个元素取所有关键词命中结果的逻辑与:
keywords <- c("recherche", "impliquant", "personne", "humaine", "3") # 对每个关键词单独匹配,再按元素取所有结果的与 apply(sapply(keywords, function(k) grepl(k, a, ignore.case = TRUE)), 1, all)
运行输出和方法1完全相同。
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

