首页  >  文章  >  后端开发  >  如何在Python中将多行文本块与正则表达式匹配?

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

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 10:25:17560浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn