Códigos postales holandeses regex R
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
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"