2013-09-25 33 views
1

正則表達式提取物的東西我有這行:如何從一個字符串

[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"; 
} 

有人能指出我做錯了嗎?謝謝!

回答

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

這個字符類不接受-哪個字符串與您的匹配包含。

嘗試把連字符:

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

而且,這是很好的躲避時間。

+0

的時期,而另一方面匹配所有的事件,或許應該*不*是在charclasses。 – amon

+0

@amon可能。不知道OP是否有字符串,其中要提取的部分包含這些... – Jerry

+0

單個連字符似乎可以解決問題! – olala

1

可以簡化正則表達式,並使用/g

if (my($m1, $m2) = /RPKM_([^.]+)/g) { 
    print $m1,"\t",$m2,"\t"; 
} 
+0

簡單。謝謝! – olala