假设我有一个数据框 df ,其中 df $ string 列包含
等字符串[cat 00.04;09]
[cat 00.04;10]
等等。我想删除" [cat "之间的所有字符和"]" 产生
[cat]
[cat]
我已经尝试使用gsub,但它无法正常工作,而且我不确定我做错了什么:
gsub('cat*?\\]', '', df)
答案 0 :(得分:4)
请注意,cat*?\\]
模式匹配ca
,然后匹配任何0 + t
字符,但尽可能少,然后]
。
您希望在]
和[cat
之间匹配]
以外的任何字符:
gsub('\\[cat[^]]*\\]', '[cat]', df$strings)
下面,
\\[
- 匹配[
cat
- 匹配cat
[^]]*
- 除了]
以外的0个字符(请注意,括号表达式中的]
在放置在开头时不应转义 - 否则,如果你逃避它,你将会需要添加perl=TRUE
参数,因为PCRE正则表达式引擎可以处理括号表达式内的正则表达式转义(不是默认的TRE))\\]
- ]
(你甚至不需要逃避它,你可以只使用]
)。请参阅R demo:
x <- c("[cat 00.04;09]", "[cat 00.04;10]")
gsub('\\[cat[^]]*\\]', '[cat]', x)
## => [1] "[cat]" "[cat]"
如果cat
可以是任何字词,请使用
gsub('\\[(\\w+)[^]]*\\]', '[\\1]', x)
其中(\\w+)
是ID = 1且与1个或多个字符匹配的捕获组,替换模式中的\\1
是代表组值的替换后向引用。