基本上输入文件是这样的:
>U51677 人非组蛋白染色质蛋白 HMG1 (HMG1) 基因,完整
cds. #some records don't have this line (see below) Length = 2575
(一些文字)
>U51677 人非组蛋白染色质蛋白 HMG1 (HMG1) 基因,完整
Length = 2575
(一些文字)
(ETC...)
现在我写这个来提取以 > 开头的行和长度的数字
import re
regex = re.compile("^(>.*)\r\n.*Length\s=\s(\d+)", re.MULTILINE)
match = regex.findall(sample_blast.read())
print match[0]
当 Length 行是 > 行的下一行时,它可以很好地提取记录。
然后我尝试了 re.DOTALL ,它应该使任何记录匹配 (.*Length) 无论是否有额外的行。
regex = re.compile("^(>.*)\r\n.*(?:\r\n*.?)Length\s=\s(\d+)", re.MULTILINE|re.DOTALL)
但它不起作用。我尝试了 re.MULTILINE 和 re.DOTALL 而不是管道,但仍然无法正常工作。
所以问题是如何创建一个匹配记录的正则表达式并返回所需的组,而不管记录中是否有额外的行。如果有人也可以在 re.VERBOSE 中展示这一点,那就太好了。对不起,很长的帖子,并提前感谢您的任何帮助。:)