删除R中字符串和括号之间的所有字符

时间:2017-12-19 08:25:59

标签: r regex gsub

假设我有一个数据框 df ,其中 df $ string 列包含

等字符串
[cat 00.04;09]
[cat 00.04;10]

等等。我想删除" [cat "之间的所有字符和"]" 产生

[cat]
[cat]

我已经尝试使用gsub,但它无法正常工作,而且我不确定我做错了什么:

gsub('cat*?\\]', '', df)

1 个答案:

答案 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是代表组值的替换后向引用。