Códigos postais holandeses regex R

Sep 13 2020

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

2 WiktorStribiżew Sep 13 2020 at 00:07

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"