荷兰邮政编码正则表达式R

时间:2020-09-12 16:26:40

标签: r regex

我有向量fromto

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

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

我想编写一个str_detect正则表达式,仅在有荷兰邮政编码(即前四位数字和后两个字母。不区分大小写)的情况下才给出TRUE

我之前也发现了这个问题:Regular expression for Dutch zip / postal code。但是此正则表达式似乎不适用于我。

我的尝试都为FALSEto的所有条目提供了from

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

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

更多尝试失败。先感谢您。可能缺少一些明显的东西:)

1 个答案:

答案 0 :(得分:2)

您需要将数字与\d模式进行匹配,并在字符串文字"\\d"中使用双反斜杠。另外,您不能在开头和结尾使用正则表达式定界符/,而只需要传递模式即可。

要使模式不区分大小写,可以在模式的开头使用(?i),或者在这里只需使用[A-Za-z]来匹配任何ASCII字母。

您可以使用

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

请参见regex demoR demo

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"