我想删除第一字符串中的字符'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,但是我只能在数字后删除个位数的字母。
有人知道吗?
谢谢!
您可以在单词边界处使用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)