Códigos postais holandeses regex R
Eu tenho vetores frome to:
from <- c("Valid from", "Zipcode from", "0000AA", "1798AA", "8900AA", "9167aa")
to <- c("Valid from", "Zipcode to", "1797zz", "8899ZZ", "9166ZZ", "9999ZZ")
Quero escrever uma str_detectregex que só funcione TRUEquando houver um código postal holandês (ou seja, quatro dígitos primeiro e duas letras depois. Não diferencia maiúsculas de minúsculas).
Também encontrei esta pergunta antes: Expressão regular para CEP / código postal holandês . Mas esta regex não parece funcionar para mim.
Todas as minhas tentativas dão FALSEpara todas as entradas de toe from:
str_detect(test, "/^[1-9][0-9]{4} [a-z]{2}$/i")
str_detect(test, "^/d{4}?/w{2}$")
E mais tentativas falharam. Agradeço antecipadamente. Provavelmente está faltando algo bastante óbvio :)
Respostas
Você precisa combinar os dígitos com o \dpadrão e usar barras invertidas duplas nos literais da string "\\d". Além disso, você não pode usar delimitadores regex, /no início e no final, você precisa apenas passar o padrão.
Para tornar o padrão insensível a maiúsculas e minúsculas, você pode usar (?i)no início do padrão ou, aqui, apenas usar [A-Za-z]para corresponder a qualquer letra ASCII.
Você pode usar
str_detect(from, "^\\d{4}[A-Za-z]{2}$")
Veja a demonstração regex e uma demonstração 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"