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

问题描述 投票:0回答:2

我想删除第一字符串中的字符'A&B'和第二字符串中的字符'B',然后从后面的向量中删除一个包含大量字符串的数字。

但是,我会保留某些字符,例如N,S,E,W,NE,NW,SE,SW,北,南,东,西(它们是方向)。

下面是一个例子:

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,但是我只能在数字后删除个位数的字母。

有人知道吗?

谢谢!

r gsub
2个回答
1
投票

您可以在单词边界处使用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"   

0
投票

如果要删除而又不留多个空格字符:

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)
© www.soinside.com 2019 - 2024. All rights reserved.