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

时间:2015-10-09 15:13:12

标签: regex r grepl

当我使用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"

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用以下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)。