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

如何在R中使用sub函数和正则表达式从街道地址提取子串

解决方法

你当前的sub逻辑是将匹配到的单元号片段替换为空,所以得到的是剔除单元号后的地址剩余部分。要直接提取单元号内容,推荐用你已经加载的stringr包的str_extract()函数,写法更直观:

library(dplyr)
library(stringr)

CivicAddress <- c("1000 FAKE STREET", "UNIT 1 1000 FAKE STREET", "UNIT 2 1000 FAKE STREET")
df2 <- data.frame(CivicAddress, stringsAsFactors = FALSE)

df2 <- df2 %>% 
  mutate(
    # 直接提取单元号片段,无匹配则返回NA
    UnitNo = str_extract(CivicAddress, "UNIT\\s+\\S+"),
    # 同时可生成剔除单元号后的标准地址,对应你原来的逻辑
    CleanAddress = str_remove(CivicAddress, "\\s*UNIT\\s+\\S+\\s*")
  )

如果要坚持用base R的sub()实现,用捕获组的写法即可:

df2$UnitNo <- sub("^(.*?)(UNIT\\s+\\S+)?(.*)$", "\\2", df2$CivicAddress)
# 把没有匹配到单元号的空字符串转为NA
df2$UnitNo[df2$UnitNo == ""] <- NA

运行后输出结果如下:

CivicAddressUnitNoCleanAddress
1000 FAKE STREETNA1000 FAKE STREET
UNIT 1 1000 FAKE STREETUNIT 11000 FAKE STREET
UNIT 2 1000 FAKE STREETUNIT 21000 FAKE STREET

如果后续遇到其他单元号格式(例如Unit A、#3等),调整正则的匹配规则即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:42:00