一次在字符串中的多个位置插入一个字符

use*_*020 3 regex text r gsub

我们说我有一个字符串

"ABCDEFGHI56dfsdfd"
Run Code Online (Sandbox Code Playgroud)

我想要做的是一次在多个位置插入一个空格字符.

例如.我想在随机选择的两个位置插入空格字符,比如4和8.

所以输出应该是

"ABCD EFGH I56dfsdfd" 
Run Code Online (Sandbox Code Playgroud)

这样做最有效的方法是什么?鉴于字符串中可以包含任何类型的字符(不仅仅是字母表).

Sve*_*ein 6

这是基于正则表达式的解决方案:

vec <- "ABCDEFGHI56dfsdfd"

# sample two random positions
pos <- sample(nchar(vec), 2)
# [1] 6 4

# generate regex pattern
pat <- paste0("(?=.{", nchar(vec) - pos, "}$)", collapse = "|")
# [1] "(?=.{11}$)|(?=.{13}$)"

# insert spaces at (after) positions
gsub(pat, " ", vec, perl = TRUE)
# [1] "ABCD EF GHI56dfsdfd"
Run Code Online (Sandbox Code Playgroud)

这种方法基于积极的前瞻,例如(?=.{11}$).在此示例中,在字符串($)结尾之前以11个字符插入空格.