从字符串向量中删除方括号

36
我有一个字符串向量,其中每个元素都被括号包围。我想要移除括号,只保留字符串本身。
所以我尝试了:
n = c("[Dave]", "[Tony]", "[Sara]")

paste("", n, "", sep="")

很不幸,这并不能奏效,原因不明。

我之前使用同样的代码完成了相同的任务,不确定为什么这次不起作用。

我想要从'[Dave]'转换成'Dave'

我做错了什么?


1
我很好奇为什么你的“粘贴”命令在过去“起作用”了... - Joshua Ulrich
4个回答

73
你可以使用 gsub 函数去掉括号,像这样:
n = c("[Dave]", "[Tony]", "[Sara]")

gsub("\\[|\\]", "", n)
[1] "Dave" "Tony" "Sara"

13

正则表达式替换可以实现这一点。请查看gsub()函数。

这会给你想要的结果(它将删除任何'['或']'的实例):

gsub("\\[|\\]", "", n)

@boulder_ruby 这是输入字符向量。 - zx8754
1
@zx8754 六年后!是的,我同意,它是一个变量。2012年7月,我刚开始在科罗拉多州卢易斯维尔的达芬奇编码训练营学习Ruby(以及后来的Rails)。那是开幕班!不知道那些人现在在做什么... - boulder_ruby
@boulder_ruby 抱歉,我的回复主要是针对其他有同样问题的用户,没有冒犯之意。 - zx8754

8
其他答案已经足够让您获得所需的输出结果。我只想简要解释一下为什么您尝试过的方法不起作用。 paste函数将字符字符串连接在一起。如果您将空字符串""与一个分隔符也是空字符串的内容连接起来,那么实际上您并没有改变任何东西。因此paste函数无法使一个字符字符串变短; 结果要么与原来相同(就像您的示例),要么更长。

8

如果您正在使用tidyverse:

library(tidyverse); library(stringr)

n = c("[Dave]", "[Tony]", "[Sara]")

n %>% str_replace_all("\\[|\\]", "")
[1] "Dave" "Tony" "Sara"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接