R:gsub /仅替换关键字出现后的那些出现

时间:2019-10-25 16:33:15

标签: r regex gsub

我只想替换出现在特定关键字/模式之后而不是之前的字符串。换句话说,在第一次出现关键字模式之前,什么也不要做,然后从该关键字模式的右边开始gsub。见下文:

gsub("\\[|\\]", "", "ab[ cd] ef keyword [ gh ]keyword ij ")

实际结果: “ ab cd ef关键字gh关键字ij”

所需结果:  “ ab [cd] [] [asfg]]] ef关键字gh关键字ij”

[已修改以修复结果。我不想删除“关键字”] [编辑以显示多次出现关键字的情况]

1 个答案:

答案 0 :(得分:1)

您可以使用\G来获得关键字之后的连续匹配。使用\K忘记匹配的内容,然后将以下[]匹配为空字符串。

(?:^.*?keyword\b|\G(?!^))[^\[\]]*\K[\[\]]

部分

  • (?:非捕获组
    • ^.*?keyword匹配直到第一个关键字
    • |
    • \G(?!^)在上一场比赛的末尾断言位置,而不是在连续比赛开始时断言
  • )关闭非捕获组
  • [^\[\]]*\K匹配0+次而不是[],而忘记了使用\K匹配的内容
  • [\[\]]匹配[]

Regex demo | R demo

您的代码可能看起来像

gsub("(?:^.*?keyword\\b|\\G(?!^))[^\\[\\]]*\\K[\\[\\]]", "", "ab[ cd] ef keyword [ gh ]keyword ij ", perl=T)

请注意,对于类似Perl的正则表达式,请在末尾使用perl=T