Códigos postales holandeses regex R

Sep 13 2020

Tengo vectores fromy to:

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

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

Quiero escribir una str_detectexpresión regular que solo se muestre TRUEcuando hay un código postal holandés (es decir, cuatro dígitos primero y dos letras después. No distingue entre mayúsculas y minúsculas).

También encontré esta pregunta antes: Expresión regular para código postal holandés . Pero esta expresión regular no parece funcionar para mí.

Todos mis intentos dan FALSEpara todas las entradas de toy from:

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

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

Y fallaron más intentos. Gracias de antemano. Probablemente se pierda algo bastante obvio :)

Respuestas

2 WiktorStribiżew Sep 13 2020 at 00:07

Es necesario que coincidan con los dígitos \dpatrón, y utilizar dobles barras invertidas en los literales de cadena, "\\d". Además, no puede usar delimitadores de expresiones regulares, /al principio y al final, solo debe pasar el patrón.

Para que el patrón no distinga entre mayúsculas y minúsculas, puede usarlo (?i)al comienzo del patrón o, aquí, simplemente usarlo [A-Za-z]para hacer coincidir cualquier letra ASCII.

Puedes usar

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

Vea la demostración de expresiones regulares y una demostración de 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"