Codici postali olandesi regex R

Sep 13 2020

Ho vettori frome to:

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

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

Voglio scrivere una str_detectregex che dia solo TRUEquando c'è un codice postale olandese (cioè, quattro cifre prima e due lettere dopo. Non distingue tra maiuscole e minuscole).

Ho anche trovato questa domanda prima: Espressione regolare per codice postale / postale olandese . Ma questa regex non sembra funzionare per me.

I miei tentativi danno tutti FALSEper tutte le voci di toe from:

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

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

E altri tentativi fallirono. Grazie in anticipo. Probabilmente manca qualcosa di abbastanza ovvio :)

Risposte

2 WiktorStribiżew Sep 13 2020 at 00:07

È necessario far corrispondere cifre con \dpattern, e utilizzare rovesciare doppio nelle stringhe letterali, "\\d". Inoltre, non puoi usare i delimitatori di regex, /all'inizio e alla fine, devi solo passare il pattern.

Per rendere il modello insensibile alle maiuscole / minuscole, puoi usarlo (?i)all'inizio del modello o, qui, usarlo semplicemente [A-Za-z]per trovare una qualsiasi lettera ASCII.

Puoi usare

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

Guarda la demo regex e una demo 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"