gpt4 book ai didi

python - 一起使用 re.MULTILINE 和 re.DOTALL python

转载 作者:太空狗 更新时间:2023-10-29 21:50:31 28 4
gpt4 key购买 nike

基本上输入文件是这样的:

>U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete

       cds. #some records don't have this line (see below)

Length = 2575

(some text)

>U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete

       Length = 2575

(some text)

(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 中展示这一点,那就太好了。很抱歉发了这么长的帖子,感谢您提前提供的帮助。 :)

最佳答案

您的问题可能是您对 \r\n 的使用。相反,请尝试仅使用 \n:

>>> x = """... >U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete... ...        cds. #some records don't have this line (see below)... ...        Length = 2575... (some text)... ... >U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete... ...        Length = 2575... (some text)... ... (etc...)... """>>> re.search("^(>.*)\n.*(?:\n*.?)Length\s=\s(\d+)", x, re.MULTILINE|re.DOTALL)<_sre.SRE_Match object at 0x10c937e00>>>> _.group(2)'2575'

此外,您的第一个 .* 太贪心了。相反,请尝试使用:^(>.*?)$.*?Length\s=\s(\d+):

>>> re.findall("^(>.*?)$.*?Length\s=\s(\d+)", x, re.MULTILINE|re.DOTALL)[('>U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete', '2575'), ('>U51677 Human non-histone chromatin protein HMG1 (HMG1) gene, complete', '2575')]

关于python - 一起使用 re.MULTILINE 和 re.DOTALL python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13110907/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com