2012-02-29 15 views
1

非常に形の悪いファイルがありますが、それを解析して1つを除いて必要な値のほとんどを抽出できます。そして、可変長を抽出するための正規表現の手助けが必要です。Pythonで正規表現を使用して可変長の数字を抽出します

他の機能を解析して抽出するために、リストインデックスと '|'、 ''、 ':'という異なるスプライタを使用しました。しかし、この場合、私はブロックすることができており(下)、それぞれの行に対して '_'の周りの数字をxとyとして別々に抽出する必要があります。

「:」で区切り、最後に「 - 」で区切ってインデックス位置[0]と[1]を抽出する方法もありますが、これは最も効率的な方法ですそう。

CHR 5:17399789から17401949 REVERSE

CHR 5:FORWARD 6414488から6415907

CHR 5:FORWARD 2981156から2982709

CHR 5:6311725から6313323 REVERSE

CHR 5:12791432から12794551 REVERSE

chr5:927915-930781 FORWARD

CHR 5:FORWARD 19585936から19587841

CHR 5:FORWARD 26894856から26896488

CHR 5:18138775から18142147 REVERSE

CHR 5:20537525から20538943 REVERSE

CHR 5:22496196から22500543 REVERSE

chr5:4747860-4753592逆戻り

上記のブロックは、このような「大きなブロック」から来ています:

AT1G09410.1 |シンボル:|ペンタトリペプチド(PPR)反復含有タンパク質| chr1:3035443-3037560 FORWARD

「より大きなブロック」でも抽出できますか?

私のプログラミングレベルは、初心者の方に最適と言えるでしょう。あなたが実際にそれぞれの上に正規表現を実行した後、最後に

numericalBlockRegEx = r'chr\d+:(?P<firstNumBlock>\d+)-(?P<secondNumBlock>\d+)' 

AK

+1

出力を具体的に投稿してください。 –

+0

@JoelCornett:出力をこの形式の17399789,17401949にします。私はすべての行から '大きなブロック'を読んで、 '|'上記のブロックである[-1]を抽出するには、digit1、digit2として ' - 'で区切られた数字を抽出する必要があります。私は既存のループに抽出を入れることができますが、数字を抽出して変数に代入する正規表現が必要です。 – Bade

答えて

3

一つのアプローチは、次のPython「生」の文字列として正規表現を定義することです

感謝(あなたはおそらく一致するよりsearchへの呼び出しを使用する必要があります)、簡単な呼び出しで興味のあるブロックを抽出することができます:

x = match.group('firstNumBlock') #Gets first number block matched 
    y = match.group('secondNumBlock') #Gets second number block matched 

乾杯!

関連する問題