R - 向量上的 grepl 条件以排除完全匹配

R - grepl conditions on vector to exclude exact match

我在使用 grepl 时很难正确排除变量。

假设我的向量是

 vec = c("POP MUSIC",  "TOP THE POPS", "POPEYE", "MARY POPPINS") 

我想 grepl POP 当我视觉识别流行音乐时。 在我的示例中,我想排除 "POPEYE", "MARY POPPINS"

我怎么能做类似的事情? 为什么这行代码不起作用?

vec[ grepl("POP", vec ) & grepl("^POPEY$", vec ) & grepl("^MARY POPPINS$", vec ) ] 

想要的结果

"POP MUSIC" "TOP THE POPS"

谢谢

您可以使用以下grep解决方案:

vec = c("POP MUSIC",  "TOP THE POPS", "POPEYE", "MARY POPPINS") 
grep("(?i)\bPOPS?\b", vec, value = TRUE)

IDEONE demo

正则表达式 (?i)\bPOPS?\b 以不区分大小写的方式匹配整个单词 POPPOPS(由于 (?i)),如果找到,则返回该值(由于 value=TRUE)。

您可能需要根据需要调整正则表达式(例如 (?i)\bPOP(S|PING)?\b 也允许 popping)。