R 删除特定字符后跟街道地址中的数字

R Remove specific character followed by number in Street Address

我想删除第一个字符串中的字符 'A&B' 和第二个字符串中的字符 'B',后跟来自以下包含大量字符串的向量中的数字。

但是,我会保留某些字符,例如 N、S、E、W、NE、NW、SE、SW、North、South、East、West(方向)。

下面是一个例子:

str <- c("852 A&B Sandpiper Drive",
         "313 B North Dogwood Avenue",
         "852 N Sandpiper Drive",
         "3212 NE Highway 22",
         "852 A B Sandpiper Drive")

预期输出如下:

str <- c("852 Sandpiper Drive",
         "313 North Dogwood Avenue",
         "852 N Sandpiper Drive",
         "3212 NE Highway 22",
         "852 Sandpiper Drive")

我真的想不出一个好的解决方案。我知道我必须使用 sub 或 gsub 但我只能删除数字后的个位数字母。

有人有想法吗?

谢谢!

您可以将 gsub 与单词边界一起使用:

gsub('\b(A&B|A|B)\s+', '', str)

#[1] "852 Sandpiper Drive" "313 North Dogwood Avenue" "852 N Sandpiper Drive"   
#[4] "3212 NE Highway 22"   "852 Sandpiper Drive"   

如果你想删除而不留下一个以上的空白字符:

sub("\b(A&B|A B|B)\b\s", "", str)
[1] "852 Sandpiper Drive"      "313 North Dogwood Avenue" "852 N Sandpiper Drive"    "3212 NE Highway 22"      
[5] "852 Sandpiper Drive"

sub 很好,因为每个字符串只有一个匹配项(否则需要 gsub); & 不是元字符,因此不需要转义

另一种解决方案是定义捕获组并在反向引用中调用它们:

sub("(^\d+)([AB& ]*)([A-Z][a-z].*$)", "\1 \3", str)