替换字符串中第四次出现的字符

Mar*_*ari 4 replace r

我试图在字符串中替换第四次出现的'_'.例如,

输入

AAA_BBB_CCC_DD_D_EEE
Run Code Online (Sandbox Code Playgroud)

产量

AAA_BBB_CCC_DDD_EEE
Run Code Online (Sandbox Code Playgroud)

有人可以建议一个解决方案?

Sim*_*lon 5

你可以使用反向引用....

gsub( "(_[^_]+_[^_]+_[^_]+)_" , "\\1" , x )
# [1] "AAA_BBB_CCC_DDD_EEE"
Run Code Online (Sandbox Code Playgroud)

编辑并感谢下面的@SonyGeorge,可以进一步简化为:

gsub( "((_[^_]+){3})_" , "\\1" , x )
Run Code Online (Sandbox Code Playgroud)


Son*_*rge 5

不知道你将在哪个平台上使用

pattern = (([^_]+_){3}[^_]+)_(.*)
replacement = $1.$2  // concat 1 and 2
Run Code Online (Sandbox Code Playgroud)