R在第二个下划线上分割一个字符串

Sig*_*ten 4 regex split r

我有两个下划线的字符串.像这些

c54254_g4545_i5454
c434_g4_i455
c5454_g544_i3
.
.
etc
Run Code Online (Sandbox Code Playgroud)

我需要通过第二个下划线拆分这些字符串,我恐怕我不知道如何在R(或任何其他工具)中这样做.如果有人能把我排除在外,我会很高兴.谢谢SM

akr*_*run 9

一种方法是使用另一个分隔符(即空格)替换第二个下划线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)


Pie*_*une 5

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)

使用模式"(_)(?=[^_]+$)",我们在一系列一个或多个非下划线字符之前的下划线上进行分割。这样我们只需要一个捕获组。