2014-11-08 20 views
32
string = c("apple", "apples", "applez") 
grep("apple", string) 

Bu, string'daki üç öğenin tümünün dizinini verir. Ama "apple" kelimesiyle tam bir eşleşme istiyorum (yani indeksi 1 döndürmek için sadece grep() istiyorum).Tam eşleşme bulmak için grep() nasıl kullanılır?

+2

Tam eşlemeler için, '==' veya 'match' kullanmayı düşünün. – flodel

+0

Grep yerine gsub'a ne dersiniz? –

cevap

57

Kullanım kelime sınır bir kelime olan ve olmayan sözcük karakteri arasında bir maçları \b,

string = c("apple", "apples", "applez") 
grep("\\bapple\\b", string) 
[1] 1 

VEYA

Kullanım çapalar. ^ Başta olduğumuzu iddia ediyor. $ Sonunda olduğumuzu iddia ediyor.

grep("^apple$", string) 
[1] 1 

Normal ifadeyi değişken içinde saklayabilir ve ardından aşağıdaki gibi kullanabilirsiniz.

pat <- "\\bapple\\b" 
grep(pat, string) 
[1] 1 
pat <- "^apple$" 
grep(pat, string) 
[1] 1 

Güncelleme: tam eşleme için

paste("^",pat,"$", sep="") 
[1] "^apple$" 
string 
[1] "apple" "apple:s" "applez" 
pat 
[1] "apple" 
grep(paste("^",pat,"$", sep=""), string) 
[1] 1 
+0

'paste0 ("^", pat," $ ")' 'paste' yazarak birkaç karakter kaydeder. "Sep =" "' ye gerek yok – Ben

19

, bu == kullanılacak en mantıklı. Ayrıca, bu grep()'dan daha hızlı olacak ve açıkçası çok daha kolay.

which(string == "apple") 
# [1] 1 
İlgili konular