5 votes

R - Pourquoi str_detect renvoie-t-il un résultat différent de grepl lors de l'utilisation de word boundary sur les 'mots' se terminant par un tiret ?

La page d'aide de str_detect indique cependant "Equivalent to grepl(pattern, x)" :

str_detect("ALL-", str_c("\\b", "ALL-", "\\b"))
[1] FALSE

Alors que

grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE

J'imagine que l'un d'entre eux ne fonctionne pas comme prévu ? Ou est-ce que quelque chose m'échappe ?

1 votes

Je ne suis pas sûr que ce soit les limites du mot parce que str_detect("ALL-", str_c("\\b", "ALL", "\\b")) renvoie à TRUE .

1voto

Megan Points 811

Lorsque vous ajoutez l'argument perl = TRUE a grepl() cela donne le même résultat :

> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-")
[1] TRUE
> grepl(str_c("\\b", "ALL-", "\\b"), "ALL-", perl = T)
[1] FALSE

Cet argument signifie grepl() utilisera le Regex compatible avec Perl.

Il y a cet avertissement dans ?grep qui pourraient être liés ?

Le mode POSIX 1003.2 de gsub et gregexpr ne fonctionne pas correctement avec des limites de mots répétées (par exemple, motif = " \b "). Utilisez perl = TRUE pour de telles correspondances (mais cela peut ne pas fonctionner comme prévu avec des entrées non-ASCII, car la signification de 'word' dépend du système).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X