我只想替换在特定关键字/模式之后出现的字符串,而不是之前出现的字符串。换句话说,在关键字模式第一次出现之前什么也不做,然后开始将gsub放在关键字模式的右侧。见下文:
gsub("\\[|\\]", "", "ab[ cd] ef keyword [ gh ]keyword ij ")实际结果:"ab cd ef关键字gh关键字ij“
预期结果:"ab cdasfg ]] ef关键字gh关键字ij“
编辑以修正结果。我不想删除‘关键字’
发布于 2019-10-25 16:58:21
您可以使用\G在关键字之后获得连续匹配。使用\K可以忘记匹配的内容,并将下面的[或]替换为空字符串。
(?:^.*?keyword\b|\G(?!^))[^\[\]]*\K[\[\]]各部分
(?:非捕获群^.*?keyword匹配直到第一个关键字|或\G(?!^)在上一次比赛结束时断言位置,而不是在开始时获得连续匹配。
)闭非捕获群[^\[\]]*\K匹配0+时间而不是[或],忘记使用\K匹配的是什么[\[\]]匹配[或]您的代码可能看起来像
gsub("(?:^.*?keyword\\b|\\G(?!^))[^\\[\\]]*\\K[\\[\\]]", "", "ab[ cd] ef keyword [ gh ]keyword ij ", perl=T)注意,对于类Perl的正则表达式,在末尾使用perl=T。
https://stackoverflow.com/questions/58562449
复制相似问题