如何用stringr处理地址重复前缀并保留单字符方向标识
解决方法
可以用stringr包的str_replace()函数结合正则表达式精准处理,既能删除冗余的两字母前缀,又保留单字符方向标识:
library(tibble) library(stringr) # 原始数据 df <- tibble(address_bad = c("1 DA DATALPA PL", "231 ST STERN AVE", "943 W WESTON AVE")) # 处理地址 df <- df %>% mutate(address_good = str_replace(address_bad, "\\b([A-Z]{2})\\b (?=\\1[A-Z]+)", "")) df
代码说明
- 正则表达式
\\b([A-Z]{2})\\b (?=\\1[A-Z]+)的作用:\\b([A-Z]{2})\\b:匹配独立的两字母大写单词,并用括号把这两个字母捕获为分组1(?=\\1[A-Z]+):正向预查规则,确保这个两字母单词后面紧跟的单词是以分组1的两个字母开头的(也就是前缀和街道名前两位重复)
str_replace()会把符合条件的两字母前缀及后续空格替换为空,删掉冗余内容;单字符方向标识(比如"W")因为不满足"两字母"的匹配条件,会被完整保留。
运行结果
#> # A tibble: 3 × 2 #> address_bad address_good #> <chr> <chr> #> 1 1 DA DATALPA PL 1 DATALPA PL #> 2 231 ST STERN AVE 231 STERN AVE #> 3 943 W WESTON AVE 943 W WESTON AVE
内容的提问来源于stack exchange,提问作者nicholas
相关产品推荐
相关产品推荐

