【发布时间】:2010-10-09 21:31:07
【问题描述】:
在匹配跨多行的文本时,我在让 Python 正则表达式工作时遇到了一些麻烦。示例文本是('\n' 是换行符)
some Varying TEXT\n
\n
DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF\n
[more of the above, ending with a newline]\n
[yep, there is a variable number of lines here]\n
\n
(repeat the above a few hundred times).
我想捕获两件事:“some_Varying_TEXT”部分,以及一次捕获中位于其下方两行的所有大写文本行(我可以稍后去掉换行符)。 我尝试了几种方法:
re.compile(r"^>(\w+)$$([.$]+)^$", re.MULTILINE) # try to capture both parts
re.compile(r"(^[^>][\w\s]+)$", re.MULTILINE|re.DOTALL) # just textlines
还有很多没有运气的变化。最后一个似乎与文本的行一一匹配,这不是我真正想要的。我可以捕捉第一部分,没问题,但我似乎无法捕捉 4-5 行大写文本。 我希望 match.group(1) 成为 some_Varying_Text 和 group(2) 成为 line1+line2+line3+etc 直到遇到空行。
如果有人好奇,它应该是构成蛋白质的氨基酸序列。
【问题讨论】:
-
文件中除了第一行和大写文本还有其他内容吗?我不确定您为什么要使用正则表达式而不是在换行符处拆分所有文本并将第一个元素作为“some_Varying_TEXT”。
-
是的,正则表达式是错误的工具。
-
您的示例文本没有前导
>字符。应该吗?