我有一个地址,81000
是邮政编码(总是一个5位数字)。
address <- "F47, First Floor, PTD 106273, Persiaran Indahpura Utama, Bandar Indahpura, 81000 Kulaijaya, Johor"
我正在尝试使用regex
确定邮政编码,我尝试了以下内容:
## postal code pattern
postal_pattern <- '\\d{5}'
## extract postal code
postal_code <- stringr::str_extract_all(address, postal_pattern)
但是,我得到了以下输出,部分正确:
> postal_code
[[1]]
[1] "10627" "81000"
如何仅使用81000
或任何库提取regex
?
答案 0 :(得分:6)
我建议从字符串中提取最后 5位数字:
> str_replace(address, ".*\\b(\\d{5})\\b.*", "\\1")
[1] "81000"
或使用基础R sub
:
> sub(".*\\b(\\d{5})\\b.*", "\\1", address)
[1] "81000"
由于.*
匹配所有字符串(行),然后开始回溯以适应后续模式,因此\d{5}
将匹配最后5位数字(作为整个单词)。
<强>详情
.*
- 任何0个或多个字符( stringr 版本中的换行符除外,如果您还需要匹配换行符,请在模式前添加(?s)
),尽可能多,直到最后一次出现的后续子模式\\b
- 一个前导词边界(前导,因为以下预期的字符是数字)(\\d{5})
- 第1组:五位数\\b
- 尾随字边界.*
- 字符串的其余部分(在 stringr 版本中,如果您还需要匹配换行符,则在(?s)
前面添加模式)答案 1 :(得分:2)
使用正则表达式
\\b\\d{5}\\b
这将确保它们处于边界