基本上输入文件是这样的:
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 中展示这一点,那就太好了。很抱歉发了这么长的帖子,感谢您提前提供的帮助。 :)
原文由 noqa 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的问题可能是您使用了
\r\n
。相反,尝试仅使用\n
:此外,您的第一个
.*
太贪心了。相反,请尝试使用:^(>.*?)$.*?Length\s=\s(\d+)
: