仅提取字符串中的 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)
)
我有一个地址,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)
)