仅提取字符串中的5位数字

时间:2017-08-28 07:50:12

标签: r regex stringr

我有一个地址,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

2 个答案:

答案 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

这将确保它们处于边界