Come usare grep () per trovare la corrispondenza esatta

string = c("apple", "apples", "applez") grep("apple", string) 

Questo mi darebbe l’indice per tutti e tre gli elementi in string . Ma voglio una corrispondenza esatta sulla parola “mela” (cioè voglio solo grep() per restituire l’indice 1).

Usa il limite della parola \b che corrisponde a un carattere tra parola e non parola,

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

O

Usa ancore. ^ Afferma che siamo all’inizio $ Afferma che siamo alla fine.

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

È ansible memorizzare la regex all’interno di una variabile e quindi utilizzarla come di seguito.

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

Aggiornare:

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

Per la corrispondenza esatta, ha più senso usare == . Inoltre, questo sarà più veloce di grep() , ed è ovviamente molto più facile.

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