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