2017-01-26 3 views
1

Мне нужно знать, существует ли решение.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" 

То, что я хотел бы, чтобы соответствовать только «клюквенный» и связанных с именами. Суть здесь - когда присутствует что-то вроде id1, grepl должен возвращать ложное, так как он содержит не только клюкву, но и чернику.

Есть ли способ, чтобы grepl возвращал false для id1 и id2, но верно для id3 и id4? Предпочтительно, единственное предложение grepl - это все, что необходимо для проблемы.

Заранее спасибо.

ответ

1

Основываясь на примере, кажется, что слова «КРАСНАЯ ЧАСТЬ», «ГОЛУБОЙ» и т. Д. Встречаются один раз в каждом наборе слов, разделенных ,. Если это так, то мы можем соответствовать слово «клюквенный» в предложении от начала строки (^), а затем символы, которые не , ([^,]+) до конца строки ($)

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

Думаю, я понимаю начало, но не []. Использует ли [] здесь «привязанность» или сортировки, которые может видеть grepl? – bzzbzzRzzbzz

+0

@bzzbzzRzzbzz Внутри '[]' мы используем '^,' для соответствия одному или нескольким символам ('+'), которые не являются ','. Таким образом, в основном, мы удаляем возможность использования других слов, таких как 'BLUEBERRY' и т. Д. На основе приведенного примера – akrun