Codes postaux néerlandais regex R

Sep 13 2020

J'ai des vecteurs fromet to:

from <- c("Valid from", "Zipcode from", "0000AA", "1798AA", "8900AA", "9167aa")

to <- c("Valid from", "Zipcode to", "1797zz", "8899ZZ", "9166ZZ", "9999ZZ")

Je veux écrire une str_detectexpression régulière qui ne donne que TRUElorsqu'il y a un code postal néerlandais (c'est-à-dire quatre chiffres d'abord et deux lettres après. Non sensible à la casse).

J'ai également trouvé cette question avant: Expression régulière pour le code postal / zip néerlandais . Mais cette regex ne semble pas fonctionner pour moi.

Mes tentatives donnent toutes FALSEpour toutes les entrées de toet from:

str_detect(test, "/^[1-9][0-9]{4} [a-z]{2}$/i")

str_detect(test, "^/d{4}?/w{2}$")

Et d'autres tentatives ont échoué. Merci d'avance. Il manque probablement quelque chose d'assez évident :)

Réponses

2 WiktorStribiżew Sep 13 2020 at 00:07

Vous devez faire correspondre les chiffres avec \dmotif, et utilisez des barres obliques inverses doubles dans la chaîne littéraux, "\\d". En outre, vous ne pouvez pas utiliser de délimiteurs d'expression régulière, /au début et à la fin, vous devez simplement passer le modèle.

Pour rendre le motif insensible à la casse, vous pouvez utiliser (?i)au début du motif, ou, ici, simplement utiliser [A-Za-z]pour correspondre à n'importe quelle lettre ASCII.

Vous pouvez utiliser

str_detect(from, "^\\d{4}[A-Za-z]{2}$")

Voir la démo regex et une démo R :

library(stringr)
from <- c("Valid from", "Zipcode from", "0000AA", "1798AA", "8900AA", "9167aa")
to <- c("Valid from", "Zipcode to", "1797zz", "8899ZZ", "9166ZZ", "9999ZZ")
str_detect(from, "^\\d{4}[A-Za-z]{2}$")
# => [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE
from[str_detect(from, "^\\d{4}[A-Za-z]{2}$")] # => [1] "0000AA" "1798AA" "8900AA" "9167aa" str_detect(to, "^\\d{4}[A-Za-z]{2}$")
to[str_detect(to, "^\\d{4}[A-Za-z]{2}$")]
# => [1] FALSE FALSE  TRUE  TRUE  TRUE  TRUE
# => [1] "1797zz" "8899ZZ" "9166ZZ" "9999ZZ"