我有两个下划线的字符串.像这些
c54254_g4545_i5454
c434_g4_i455
c5454_g544_i3
.
.
etc
Run Code Online (Sandbox Code Playgroud)
我需要通过第二个下划线拆分这些字符串,我恐怕我不知道如何在R(或任何其他工具)中这样做.如果有人能把我排除在外,我会很高兴.谢谢SM
一种方法是使用另一个分隔符(即空格)替换第二个下划线sub,然后使用它进行拆分.
使用时sub,我们匹配一个或多个不是_来自^string(^[^_]+)的开头()的字符,后跟第一个下划线(_),后跟一个或非_(a [^_]+)的字符.我们通过将它放在括号((....))中来捕获它作为一个组,然后我们匹配_后跟一个或多个字符,直到第二个捕获组((.*)$)中字符串的结尾.在替换中,我们将第一个(\\1)和第二个(\\2)与空格分开.
strsplit(sub('(^[^_]+_[^_]+)_(.*)$', '\\1 \\2', v1), ' ')
#[[1]]
#[1] "c54254_g4545" "i5454"
#[[2]]
#[1] "c434_g4" "i455"
#[[3]]
#[1] "c5454_g544" "i3"
Run Code Online (Sandbox Code Playgroud)
v1 <- c('c54254_g4545_i5454', 'c434_g4_i455', 'c5454_g544_i3')
Run Code Online (Sandbox Code Playgroud)
strsplit(sub("(_)(?=[^_]+$)", " ", x, perl=T), " ")
#[[1]]
#[1] "c54254_g4545" "i5454"
#
#[[2]]
#[1] "c434_g4" "i455"
#
#[[3]]
#[1] "c5454_g544" "i3"
Run Code Online (Sandbox Code Playgroud)
使用模式"(_)(?=[^_]+$)",我们在一系列一个或多个非下划线字符之前的下划线上进行分割。这样我们只需要一个捕获组。