匹配 gsub 模式中的下一个符号

matching the next symbol in gsub pattern

有一个看起来像这样的简化示例字符串:

string = "AA: 1%, BB: 2%, CC: 3%, DD: 4% and EE: 5%."

我想通过模式匹配来替换它的一部分。我尝试以这种方式使用 gsub:

gsub("(BB{1}.*%{1}), ","BB: no data, ",string)

但是 returns 下一个:

"AA: 1%, BB: no data, DD: 4% and EE: 5%."

就好像是在找最后的%符号一样。我想替换到下一个 %,而不是最后一个,保留 CC 部分。期望的输出:

"AA: 1%, BB: no data, CC: 3%, DD: 4% and EE: 5%."

这类问题经常被标记为重复。我一直在搜索半小时,但一无所获,所以我决定问问一些正则表达式大师是否可以提供帮助。

怎么样:

gsub("(BB: )\d%","\1no data", string)