2017-03-10 8 views
0

これは、txtファイル(CDS-テキスト-ORIGINの繰り返し単位)の構造で一覧表示する追加、文字列として二つの単語間のテキストをキャプチャ:私は引き出すたいPythonの正規表現 - その後、

 CDS    311..>428 
        /gene="PNR" 
        /codon_start=1 
        /product="photoreceptor-specific nuclear receptor" 
        /protein_id="AAD28302.1" 
        /db_xref="GI:4726077" 
        /translation="METRPTALMSSTVAAAAPAAGAASRKESPGRWGLGEDPT" 
ORIGIN 

文字列 として311 .. < 428からGEDPTにテキスト」私がこれまで持っている正規表現は次のとおりです。

compiler = re.compile(r"^\s+CDS\s+(.+)ORIGIN.+", re.DOTALL|re.MULTILINE) 

私は、リストに各文字列を追加するためにループを使用します。

for line in file: 
    match = compiler.match(line) 
    if match: 
     list.append(str(match.group(1))) 

しかし、私は空のリストを取得し続けています!なぜどんなアイデア?

助けていただければ幸いです。私はこれが初めてです!

答えて

1

私はfilefile = open('filename.txt')のようなファイルポインタであると仮定しています。それがそうである場合:

for line in file: 

改行文字の各行が壊れます。したがって、最初の3行は次のようになります。

1: '  CDS    311..>428\n' 
2: '      /gene="PNR"\n' 
3: '      /codon_start=1:\n' 

各行は別々であるため、行を結合しない限り、複数行のパターンは一致しません。使用することを検討することがあります:

compiler = re.compile(r"^\s+CDS\s+(.+?)ORIGIN", re.DOTALL|re.MULTILINE) 
fp = open('filename.txt') 
all_text = fp.read()   # this reads all the text without splitting on newlines 
compiler.findall(all_text) # returns a list of all matches