基本的に、入力ファイルは次のようになります。
>U51677 ヒト非ヒストンクロマチンタンパク質 HMG1 (HMG1) 遺伝子、完全
cds. #some records don't have this line (see below) Length = 2575
(一部テキスト)
>U51677 ヒト非ヒストンクロマチンタンパク質 HMG1 (HMG1) 遺伝子、完全
Length = 2575
(一部テキスト)
(等...)
>で始まる行と長さの数字を抽出するためにこれを書きました
import re
regex = re.compile("^(>.*)\r\n.*Length\s=\s(\d+)", re.MULTILINE)
match = regex.findall(sample_blast.read())
print match[0]
長さの行が>行の次の行である場合、レコードを抽出するのにうまく機能します。
次に、余分な行があるかどうかに関係なく、レコードを一致させる必要がある re.DOTALL (.*Length) を試しました。
regex = re.compile("^(>.*)\r\n.*(?:\r\n*.?)Length\s=\s(\d+)", re.MULTILINE|re.DOTALL)
しかし、うまくいきません。パイプの代わりに re.MULTILINE と re.DOTALL を試しましたが、それでもうまくいきません。
したがって、問題は、レコードに一致する正規表現を作成し、レコードに余分な行があるかどうかに関係なく、目的のグループを返す方法です。誰かがこれを re.VERBOSE でも表示できるといいですね。長い投稿で申し訳ありません。事前に助けてくれてありがとう。:)