Kode pos Belanda regex R
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
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"