R 在预定义位置拆分字符串

R splitting string on predefined location

我有字符串,应该从“随机”位置拆分成多个部分。拆分总是从冒号后的下一个逗号开始。

我的想法是找到带有

的冒号
stringr::str_locate_all(test, ":") %>% 
  unlist()

然后找到逗号

stringr::str_locate_all(test, ",") %>% 
  unlist()

并从那里找出应该拆分的位置,但找不到合适的方法。感觉冒号后逗号前总是有 6 个字符,但我不能确定整个数据。

这是示例字符串:

dput(test)
"AA,KK,QQ,JJ,TT,99,88:0.5083,66,55:0.8303,AK,AQ,AJs,AJo:0.9037,ATs:0.0024,ATo:0.5678"

这是应该的结果

dput(result)
c("AA,KK,QQ,JJ,TT,99,88:0.5083", "66,55:0.8303", "AK,AQ,AJs,AJo:0.9037", 
"ATs:0.0024", "ATo:0.5678")

这里有一个带有 strsplit 的选项 - 将 . 和一位或多位数字 (\d+) 后面的 , 替换为新的分隔符使用 gsub,然后在 base R

中与 strsplit 拆分
result1 <- strsplit(gsub("([0-9]\.[0-9]+),", "\1;", test), ";")[[1]]

-正在检查

> identical(result, result1)
[1] TRUE

如果字符数是固定的,使用正则表达式查找

result1 <-  strsplit(test, "(?<=:.{6}),", perl = TRUE)[[1]]

也许我们可以像下面这样使用regmatches

> regmatches(test, gregexpr("(\w+,?)+:[0-9.]+", test))[[1]]
[1] "AA,KK,QQ,JJ,TT,99,88:0.5083" "66,55:0.8303"
[3] "AK,AQ,AJs,AJo:0.9037"        "ATs:0.0024"
[5] "ATo:0.5678"