You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用R语言正则表达式拆分含数字的地址组件

解决地址拆分的正则表达式调整方案

核心思路

先统一移除所有逗号,再通过正则精准捕获三个关键部分:

  1. 街道名:从地址开头到第一个数字串前的所有文本(保留RUA/AV这类前缀及完整名称)
  2. 门牌号:第一个连续数字序列(支持前导零)
  3. 补充信息:门牌号之后的所有剩余文本

完整R代码实现

library(tidyr)
library(stringr)

# 原始地址数据
addresses <- c(
  "RUA DOS PASSOS 1523 CS 2",
  "AV CAXIAS, 02 CASA 05",
  "AV 11 DE NOVEMBRO 2032 CASA 4",
  "RUA 05 DE OUTUBRO, 25 CASA 02"
)

# 第一步:移除所有逗号,统一地址格式
clean_addresses <- str_remove_all(addresses, ",")

# 第二步:用正则拆分地址为指定字段
address_df <- extract(
  data.frame(address = clean_addresses),
  col = address,
  into = c("no_logradouro", "nu_logradouro", "complemento"),
  regex = "^([^0-9]+)\\s+(\\d+)\\s+(.*)$",
  remove = FALSE
)

# 清理街道名末尾的多余空格
address_df$no_logradouro <- str_trim(address_df$no_logradouro)

# 查看结果
print(address_df)

正则表达式解析

^([^0-9]+)\\s+(\\d+)\\s+(.*)$

  • ^([^0-9]+):捕获从地址开头到第一个数字前的所有非数字文本,确保完整匹配街道名称
  • \\s+:匹配街道名与门牌号之间的一个或多个空格,兼容地址里的空格格式差异
  • (\\d+):捕获连续数字序列,完美支持带前导零的门牌号
  • \\s+:匹配门牌号与补充信息之间的空格
  • (.*)$:捕获门牌号之后的所有剩余内容,覆盖各类补充信息格式

最终输出结果

addressno_logradouronu_logradourocomplemento
RUA DOS PASSOS 1523 CS 2RUA DOS PASSOS1523CS 2
AV CAXIAS 02 CASA 05AV CAXIAS02CASA 05
AV 11 DE NOVEMBRO 2032 CASA 4AV 11 DE NOVEMBRO2032CASA 4
RUA 05 DE OUTUBRO 25 CASA 02RUA 05 DE OUTUBRO25CASA 02

内容的提问来源于stack exchange,提问作者Pedro Cunha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:02:40