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

时间:2015-09-04 12:44:34

标签: regex r split

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

c54254_g4545_i5454
c434_g4_i455
c5454_g544_i3
.
.
etc

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

3 个答案:

答案 0 :(得分:7)

一种方法是使用sub用另一个分隔符(即空格)替换第二个下划线,然后使用它进行拆分。

使用sub,我们会匹配字符串(_)的开头(^)后面不是^[^_]+的一个或多个字符,后跟第一个下划线(_)后跟一个或不是_[^_]+)的字符。我们通过将其放在括号((....))内将其捕获为一个组,然后我们匹配_后跟一个或多个字符,直到第二个捕获组中的字符串结尾({{1 }})。在替换中,我们将第一个((.*)$)和第二个(\\1)与空格分开。

\\2

数据

strsplit(sub('(^[^_]+_[^_]+)_(.*)$', '\\1 \\2', v1), ' ')
#[[1]]
#[1] "c54254_g4545" "i5454"       

#[[2]]
#[1] "c434_g4" "i455"   

#[[3]]
#[1] "c5454_g544" "i3" 

答案 1 :(得分:4)

strsplit(sub("(_)(?=[^_]+$)", " ", x, perl=T), " ")
#[[1]]
#[1] "c54254_g4545" "i5454"       
#
#[[2]]
#[1] "c434_g4" "i455"   
#
#[[3]]
#[1] "c5454_g544" "i3"

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

答案 2 :(得分:0)

我这样做了。然而,虽然它的工作原理可能会有一个更好的'方式是什么?

str = 'c110478_g1_i1'

m = strsplit(str, '_')
f <- paste(m[[1]][1],m[[1]][2],sep='_')