使用正则表达式匹配多行块
使用 Python 的正则表达式匹配跨多行的文本时,您可能会遇到困难。考虑以下示例文本:
some Varying TEXT DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF [more of the above, ending with a newline] [yep, there is a variable number of lines here] (repeat the above a few hundred times).
目标是捕获两个组成部分:
尝试了几种方法但没有成功:
re.compile(r"^>(\w )$$(\n[.$] )^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s] )$", re.MULTILINE|re.DOTALL) # Just textlines
要解决此问题,请使用以下正则表达式:
re.compile(r"^(. )\n((?:\n. ) )", re.MULTILINE)
请记住,锚点“^”和“$”不匹配换行符。因此,在多行模式下,“^”在换行符之后,“$”在换行符之前。
此外,请注意各种换行符格式。对于可能包含换行符、回车符或两者的文本,请使用以下更具包容性的正则表达式:
re.compile(r"^(. )(?:\n|\r\n?)((?:(?:\n|\r\n?). ) )", re.MULTILINE)
这里不需要 DOTALL 修饰符,因为点已经排除了换行符。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3