1

我有这条线:

[1] "RPKM_AB123_Gm12878_control.extended.bed_28m_control_500 and RPKM_AB156_GM12878-50ng_test.extended.bed_28m_test_500"

我想从字符串中提取AB123_Gm12878_control和。AB156_GM12878-50ng

我已经尝试过了,但它还没有工作。

if ($_ =~ /.*"RPKM_([\w.]+).extended.+\s\w+\sRPKM_([\w.]+).extended.+"/){
   print $1,"\t",$2,"\t";
}

有人能指出我哪里做错了吗?谢谢!

4

2 回答 2

3
".*RPKM_([\w.]+).extended.+\s\w+\sRPKM_([\w.]+).extended.+"
                                        ^^^^^

此字符类不接受-您匹配的字符串包含哪个字符串。

尝试将连字符放入:

".*RPKM_([\w.]+)\.extended.+\s\w+\sRPKM_([\w.-]+)\.extended.+"

此外,最好避开这些时期。

于 2013-09-25T18:15:55.670 回答
1

您可以简化正则表达式并使用匹配所有匹配项/g

if ( my($m1, $m2) = /RPKM_([^.]+)/g ) {
  print $m1,"\t",$m2,"\t";
}
于 2013-09-25T18:34:10.337 回答