我有一个地址,这81000是邮政编码(总是一个5位数字).
address <- "F47, First Floor, PTD 106273, Persiaran Indahpura Utama, Bandar Indahpura, 81000 Kulaijaya, Johor"
Run Code Online (Sandbox Code Playgroud)
我正在尝试确定使用的邮政编码regex,我尝试了以下内容:
## postal code pattern
postal_pattern <- '\\d{5}'
## extract postal code
postal_code <- stringr::str_extract_all(address, postal_pattern)
Run Code Online (Sandbox Code Playgroud)
但是,我得到了以下输出,这是部分正确的:
> postal_code
[[1]]
[1] "10627" "81000"
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取81000使用regex或任何库?
我建议从字符串中提取最后一个 5位数字:
> str_replace(address, ".*\\b(\\d{5})\\b.*", "\\1")
[1] "81000"
Run Code Online (Sandbox Code Playgroud)
或者用基数R sub:
> sub(".*\\b(\\d{5})\\b.*", "\\1", address)
[1] "81000"
Run Code Online (Sandbox Code Playgroud)
由于.*匹配所有字符串(行)然后开始回溯以适应后续模式,因此\d{5}将匹配最后5位数字(作为整个单词).
细节
.*- 任何0个或更多字符(除了字符串版本中的换行符,(?s)如果你需要匹配换行符,也会在前面添加模式),尽可能多,直到后续子模式的最后一次出现\\b - 一个主要的单词边界(领先,因为以下预期的字符是一个数字)(\\d{5}) - 第1组:五位数\\b - 尾随字边界.*- 字符串的其余部分(在stringr版本中,(?s)如果你需要匹配换行符,则在模式前加上)