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

时间:2017-01-26 04:39:37

标签: r grep grepl

我需要知道是否存在解决方案。

我们说我们有一个包含如下内容的列表:

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应该返回一个假,因为它不仅包含蔓越莓,还有蓝莓。

grepl是否有办法为id1和id2返回false,但对于id3和id4是否为true?优选地,单个grepl句子是问题所需的全部内容。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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