【问题标题】:remove all characters between string and bracket in R删除R中字符串和括号之间的所有字符
【发布时间】:2017-12-19 08:25:58
【问题描述】:

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

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

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

[cat]
[cat]

我已经使用 gsub 尝试过,但它不起作用,我不确定我做错了什么:

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

【问题讨论】:

  • 要查看您做错了什么,您应该与我们分享您的失败代码。
  • 很公平,我添加了错误的代码,谢谢
  • 真的很恶心,试试gsub('\\[cat.*?\\]', '[cat]', df$strings)。或gsub('(\\[cat).*?(\\])', '\\1\\2', df$strings)。或gsub('\\[cat[^]]*\\]', '[cat]', df$strings).
  • 我尝试的第一个成功了!非常感谢!
  • 和我发的差不多,只有下面的那个也会处理[cat]之间有换行的情况,而且会更快。跨度>

标签: r regex gsub


【解决方案1】:

请注意,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 是代表组值的替换反向引用。

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多