分割字符串而不考虑特殊字符

Pat*_*rin 5 regex string r strsplit

我需要一种方法来每 n 个字母分割一个字符串。

例如令s="QW%ERT%ZU%I%O%P"n=3,我想获得"QW%E" "RT%Z" "U%I%O" "%P"

如您所见,除法中不考虑特殊字符“%”。

我尝试过

strsplit(s, "(?<=.{10})(?=.*\\%)", perl = TRUE)[[1]]
Run Code Online (Sandbox Code Playgroud)

但我找不到办法获得我想要的东西。

Tho*_*ing 5

regmatches像下面这样的(而不是strsplit)怎么样?

> n <- 3

> regmatches(s, gregexpr(sprintf("(\\W?\\w){1,%i}", n), s))
[[1]]
[1] "QW%E"  "RT%Z"  "U%I%O" "%P"
Run Code Online (Sandbox Code Playgroud)

tapply+strsplit

v <- unlist(strsplit(s, ""))
l <- which(grepl("\\w", v))
tapply(
    v,
    cumsum(seq_along(v) %in% (1 + by(l, ceiling(seq_along(l) / n), max))),
    paste0,
    collapse = ""
)
Run Code Online (Sandbox Code Playgroud)

这使

      0       1       2       3
 "QW%E"  "RT%Z" "U%I%O"    "%P"
Run Code Online (Sandbox Code Playgroud)