R sub替换已识别字符串

时间:2017-07-01 21:12:24

标签: r regex grep

嗨,我需要清理一个大的地址数据帧。其中一个问题是我希望用不需要的空格替换数字和后缀,如下所示

original <- c("73 A Acacia Avenue","656 B East Street", " FLAT 1 D High Road", "66B West Street")
corrected <- c("73A Acacia Avenue","656B East Street", " FLAT 1D High Road")

我可以使用grep和regexpr识别并隔离我想要更改的内容,但我不确定如何删除有问题的空间并替换原始数据框中的更正

reg <- "([0-9]+ [A-Z] )"
grep(reg, original, value = T, perl =T) # finds match
grep(reg, original, perl =T) # finds match row
regexpr(reg,match) # finds position
findstr <- regmatches(match,r) # show relevant string

所以我的最后阶段是删除空白并应用更正。 任何帮助表示赞赏

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用gsub与您的(有点修改)正则表达式和\1\2替换:

original <- c("73 A Acacia Avenue","656 B East Street", " FLAT 1 D High Road", "66B West Street")
reg <- "([0-9]+)\\s([A-Z]\\s+)"
gsub(reg, "\\1\\2", original)
## => [1] "73A Acacia Avenue" "656B East Street" " FLAT 1D High Road" [4] "66B West Street"

请参阅online R demo

<强>详情:

  • ([0-9]+) - 第1组匹配一个或多个数字
  • \\s - 空白
  • ([A-Z]\\s+) - 第2组匹配大写的ASCII字母,然后是1个或多个空格。

替换为\1\2,其中\1是第一组的值,\2引用第二组中的值。