R:gsub /只替换关键字出现后的出现

问题描述 投票:0回答:1

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

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

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

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

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

r regex gsub
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.