Kode pos Belanda regex R

Sep 13 2020

Saya memiliki vektor fromdan to:

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

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

Saya ingin menulis str_detectregex yang hanya memberi TRUEjika ada kode pos Belanda (yaitu, empat digit pertama dan dua huruf setelahnya. Non case sensitive).

Saya juga menemukan pertanyaan ini sebelumnya: Persamaan reguler untuk kode pos / pos Belanda . Tapi ekspresi reguler ini sepertinya tidak berhasil untuk saya.

Upaya saya semua memberi FALSEuntuk semua entri dari todan from:

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

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

Dan lebih banyak upaya gagal. Terima kasih sebelumnya. Mungkin melewatkan sesuatu yang cukup jelas :)

Jawaban

2 WiktorStribiżew Sep 13 2020 at 00:07

Anda harus mencocokkan angka dengan \dpola, dan menggunakan garis miring terbalik ganda dalam literal string "\\d",. Selain itu, Anda tidak dapat menggunakan pembatas regex, /di awal dan akhir, Anda hanya perlu meneruskan polanya.

Untuk membuat pola tidak peka huruf besar / kecil, Anda dapat menggunakan (?i)di awal pola, atau, di sini, cukup gunakan [A-Za-z]untuk mencocokkan huruf ASCII apa pun.

Kamu dapat memakai

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

Lihat demo regex dan 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"