我有两个下划线的字符串。像这些
c54254_g4545_i5454
c434_g4_i455
c5454_g544_i3
.
.
etc
我需要通过第二个下划线拆分这些字符串,我担心我不知道如何在R(或任何其他工具)中这样做。如果有人能把我排除在外,我会非常高兴。 谢谢 SM
答案 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='_')