web-dev-qa-db-fra.com

Comment utiliser grep () / gsub () pour trouver une correspondance exacte

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

Cela me donnerait l'index pour les trois éléments dans string. Mais je veux une correspondance exacte sur le mot "Apple" (c'est-à-dire que je veux juste que grep() renvoie l'index 1).

52
Adrian

Utiliser la limite de mots \b qui correspond à un caractère entre Word et non-Word,

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

OU

Utilisez des ancres. ^ Affirme que nous sommes au début. $ Affirme que nous sommes à la fin.

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

Vous pouvez stocker la regex dans une variable, puis l’utiliser comme ci-dessous.

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

Mise à jour:

paste("^",pat,"$", sep="")
[1] "^Apple$"
string
[1] "Apple"   "Apple:s" "applez" 
pat
[1] "Apple"
grep(paste("^",pat,"$", sep=""), string)
[1] 1
91
Avinash Raj

Pour une correspondance exacte, il est logique d'utiliser ==. De plus, cela sera plus rapide que grep(), et est évidemment beaucoup plus facile.

which(string == "Apple")
# [1] 1
26
Rich Scriven