如何从字符串中提取正则表达式

时间:2013-09-25 18:12:36

标签: regex perl

我有这一行:

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

我想从字符串中提取AB123_Gm12878_controlAB156_GM12878-50ng

我试过这个但它还没有用。

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

有人可以指出我做错的地方吗?谢谢!

2 个答案:

答案 0 :(得分:3)

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

此字符类不接受您匹配的字符串所包含的-

尝试将连字符放入:

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

此外,逃避这段时间也是好事。

答案 1 :(得分:1)

您可以使用/g

简化正则表达式并匹配所有匹配项
if ( my($m1, $m2) = /RPKM_([^.]+)/g ) {
  print $m1,"\t",$m2,"\t";
}