【发布时间】:2015-11-03 02:22:53
【问题描述】:
我有这个mystring 和分隔符_。这里的条件是如果有两个或多个分隔符,我想在第二个分隔符处拆分,如果只有一个分隔符,我想在".Recal"处拆分并得到result,如下所示。
mystring<-c("MODY_60.2.ReCal.sort.bam","MODY_116.21_C4U.ReCal.sort.bam","MODY_116.3_C2RX-1-10.ReCal.sort.bam","MODY_116.4.ReCal.sort.bam")
结果
"MODY_60.2" "MODY_116.21" "MODY_116.3" "MODY_116.4"
【问题讨论】:
-
有趣的问题。不知道有没有办法一次性搞定。我可以像
sub("(.+_.+)_.+$", "\\1", sub("\\.ReCal.+$", "", mystring))一样破解它,但我相信有人可以改进它。 -
模仿正则表达式的逻辑,可能是这样的:
sub("(?(?=.+_.+_)(.+_.+)_.*|(.+)\\.ReCal.*)", "\\1\\2", mystring, perl = TRUE). -
如果您确实设法在一个正则表达式中实现了这一点,或者甚至采用了@nongkrong 的解决方案,请在代码上方添加评论,以便您未来的自己(或成为看守人)知道你想做什么。我用我年轻时自己制作的“非常聪明的解决方案”咬了自己几次,花了很长时间才记住背后的细节/推理。