grepl 严格匹配单词的某些部分

grepl matching strictly only certain parts of words

我想知道是否有解决方案。

假设我们有一个包含以下内容的列表:

id Item
1  "CRANBERRY 10PKTS CARTON, BLUEBERRY 20PKTS CARTON"
2  "CRANBERRY 10PKTS CARTON,BLUEBERRY 20PKTS CARTON"
3  "CRANBERRY 10PKTS CARTON"
4  "CRANBERRY 30PKTS CARTON"

我想要的是仅匹配 "CRANBERRY" 及其相关名称。这里的症结在于,当存在类似 id1 的东西时,grepl 应该 return 为假,因为它不仅包含蔓越莓,还包含蓝莓。

有没有办法让 grepl 对 id1 和 id2 return false,但对 id3 和 id4 为真?最好只需要一个 grepl 语句就可以解决这个问题。

提前致谢。

根据示例,模式似乎是单词 'CRANBERRY'、'BLUEBERRY' 等在由 , 分隔的每组单词中出现一次。如果是这种情况,我们可以从字符串 (^) 的开头匹配句子中的单词 'CRANBERRY',后跟不是 , 的字符([^,]+ ) 直到字符串结尾 ($)

grepl("^.*\bCRANBERRY[^,]+$", df1$Item)
#[1] FALSE FALSE  TRUE  TRUE