我只想替换出现在特定关键字/模式之后而不是之前的字符串。换句话说,在第一次出现关键字模式之前,什么也不要做,然后从该关键字模式的右边开始gsub。见下文:
gsub("\\[|\\]", "", "ab[ cd] ef keyword [ gh ]keyword ij ")
实际结果: “ ab cd ef关键字gh关键字ij”
所需结果: “ ab [cd] [] [asfg]]] ef关键字gh关键字ij”
[已修改以修复结果。我不想删除“关键字”] [编辑以显示多次出现关键字的情况]
答案 0 :(得分:1)
您可以使用\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
。