仅当字符串在 R 中出现多次时,如何使用替换字符串的第一次出现?

J.S*_*ree 6 r gsub

我有一个看起来像这样的字符串:

problem <- c("GROUP 1", "GROUP 1 & GROUP 2", "GROUP 1 & GROUP 2 & GROUP 3", "GROUP 1 & GROUP 2 & GROUP 3 & GROUP 4")
Run Code Online (Sandbox Code Playgroud)

每组之间有“&”。当存在多个“&”时,我想使用 R(或者包sub()中的某些东西)将每个“&”替换为“,”。stringr但是,我不想改变最后的“&”。我该怎么做,它看起来像:

#Note: Only the 3rd and 4th strings should be changed
solution <- c("GROUP 1", "GROUP 1 & GROUP 2", "GROUP 1, GROUP 2 & GROUP 3", "GROUP 1, GROUP 2, GROUP 3 & GROUP 4")
Run Code Online (Sandbox Code Playgroud)

在实际的字符串中,可能有无限数量的“&”,所以如果可能的话,我不想硬编码限制。

Tar*_*Jae 4

我们可以将正则表达式与前瞻断言Regex Lookahead、Lookbehind 和atomic groups结合使用。

library(stringr)
str_replace_all(problem, " &(?=.*?&)", ", ")
Run Code Online (Sandbox Code Playgroud)

输出:

[1] "GROUP 1"                              
[2] "GROUP 1 & GROUP 2"                    
[3] "GROUP 1,  GROUP 2 & GROUP 3"          
[4] "GROUP 1,  GROUP 2,  GROUP 3 & GROUP 4"
Run Code Online (Sandbox Code Playgroud)