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

Extract only 5-digit-number in a string

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

如何只使用 regex 或任何库提取 81000

使用正则表达式

\b\d{5}\b

这将确保他们在边界

我建议从字符串中提取 last 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) )