如何在Python中将多行文本块与正则表达式匹配?

Mary-Kate Olsen
发布: 2024-10-25 10:25:17
原创
569 人浏览过

How to Match Multi-Line Text Blocks with Regular Expressions in Python?

在 Python 中将多行文本块与正则表达式匹配

在 Python 中,处理多行文本时,正则表达式匹配可能具有挑战性。例如,考虑以下文本,其中“n”代表换行符:

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+)$$(\[.$]+)^$", re.MULTILINE)
re.compile(r"(^[^>]\[\w\s]+)$", re.MULTILINE|re.DOTALL)
登录后复制

解决方案:

要正确匹配多行文本,请使用以下正则表达式:

re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)
登录后复制

这个模式匹配以下内容:

  • 组 1: "some Varying TEXT"
  • 组 2: 以 2 开头的所有大写文本行“some Varying TEXT”下面的行

要点:

  • ^ 和 $ 锚点分别匹配换行符之后和之前的位置。
  • ?: 运算符使换行符组不被捕获。
  • .* 量词捕获一行或多行大写文本。

替代解决方案:

如果目标文本可能包含除换行符 (n) 之外的其他类型的换行符,请使用以下更具包容性的版本:

re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)
登录后复制

以上是如何在Python中将多行文本块与正则表达式匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!