2014-11-08 10 views

Antwort

57

Verwenden Wortgrenze \b die ein zwischen einem Wort entspricht, und Nicht-Wortzeichen,

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

OR

Verwenden Anker. ^ Bestätigt, dass wir am Anfang sind. $ Bestätigt, dass wir am Ende sind.

Sie könnten die Regex in einer Variablen speichern und dann wie folgt verwenden.

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

Update:

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

'paste0 ("^", pat," $ ")' speichert einige Zeichen der Eingabe über 'Einfügen'. Keine Notwendigkeit für "sep =" "' – Ben

19

Für exakte Anpassung, macht es am meisten Sinn == zu verwenden. Darüber hinaus wird dies schneller als grep(), und ist offensichtlich viel einfacher.

which(string == "apple") 
# [1] 1 
Verwandte Themen