2017-07-19 6 views
-1

Pythonで正規表現に問題があります。 >この文字列の後にすべてをキャプチャする方法は?ファーストヘッダ付きのPython正規表現

>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; release=r2.32; species=Homo; CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA

出力はこのようになります: 4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; release=r2.32; species=Homo; CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA

編集:私は読ん各シーケンスは複数行であるため、FASTAごと(re.matchを使用するか、

+0

''(? <=\>)。* "' – victor

答えて

0

をre.searchことを期待しています標準)では、正規表現は仕事のための最良のツールではありません。これは、正規表現パターンは一般にファイルを特定のパターンを検索する行ごとに処理することを意味し、FASTAのヘッダとシーケンス行は一般的にそのような共通のフォーマット/パターンを共有しないためです。

FASTAレコードの抽出用に設計されたツールを試してみましたか? Biopythonは、特にFASTA/Qシーケンスを扱うためのmoduleを持っています。

0

あなたは本当に正規表現を必要としません。 「>」で文字列を分割し、第二の部分を選択します。

text = '>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; 
release=r2.32; species=Homo; 
CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG 
CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT 
TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT 
TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA' 

test = test.split('>')[1] 

print(test) 
0

あなたは(正当化を無視して)必要な情報を抽出するために、正規表現を使用するには:

import re 

text = '''>4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; 
release=r2.32; species=Homo; 
CCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG 
CAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT 
TAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT 
TGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA''' 
# need . to match a new line. 
result = re.search("\>(.*)", text, flags=re.DOTALL) 
if result: 
    print(result.groups(1)) 

次を印刷し、どの:

('4L type=chromosome; loc=6L:1.733034524; ID=4L; length=4534673; \nrelease=r2.32; species=Homo;\nCCAACATATTGTGCTAATGAGTGCCTCTCGTTCTCTGTCTTATATTACCG\nCAAACCCAAAAAGACAATACACGACAGAGAGAGAGAGCAGCGGAGATATT\nTAGATTGCCTATTAAATATGATCGCGTATGCGAGAGTAGTGCCAACATAT\nTGTGCTCTCTATATAATGACTGCCTCTCATTCTGTCTTATTTTACCGCAA',) 

だから、おそらくあなたは多分このような醜い何かを、改行を取り除く必要があります:

result.groups(1)[0].replace("\n","")