REGEX 匹配两个 headers 之间的文档部分

REGEX match for portions of a document between two headers

我正在尝试编写捕获文档多个部分的 python 兼容 REGEX,但未能成功。我的代码实际上将在 Python 中,但现在我只尝试在 regex101.com 中获得正确的表达式。 (显然不成功:))

我的文字是 file-based,看起来像这样:

<#

.概要
这是概要文本,即多行
概要 - 我想匹配所有这些文本
作为捕获组。
.参数
这是另一块
我要捕获的多行文本
.SOMEOTHER HEADER
和一些其他的多行文本

#

我想在全球范围内捕获 2 个组(header 和 body 文本)。 (即每个部分)。

我的最终目标是 python 字典数组;

[
{'header':'SYNOPSIS', 'text': }
{'header':'PARAMETER', 'text': }
]

header 部分始终锚定在行首,并带有“.”。然后是大写的 TEXT。该部分的 body 包括任何单词和 non-word 个字符,包括 CR/LF(基于 windows)。

不保证 Header 名称是固定的文字,或以特定的顺序排列。我也不知道可能存在多少 header。

现在看起来像这样 (^\.[A-Z]+)([\n\W\w]+)

现在我可以匹配 header 后跟 body,但我很难告诉 REGEX 本质上是 'stop looking when you hit the next .HEADERTEXT'.

我已经创建了一个 Regex101 https://regex101.com/r/YqibeH/4 如果它有用的话(不确定这可能会怎样)。 . .

我的伪代码是这样的,

查找所有以^.[A-Z]开头的行作为捕获组,然后继续匹配header之后的所有文本(多行)作为第二个捕获组。在下一个 header 开始之前停止捕获 ^.[A-Z]

非常感谢任何帮助。

我相信您正在寻找的是向前看。此外,您所做的搜索是贪婪的,应该改为惰性量词。话虽如此。这应该有效。

^\.\w+[\n\W\w]+?(?=^\.\w+|^#>) https://regex101.com/r/YqibeH/7

^\.\w+ 贪婪地捕获你的 header 文字。

[\n\W\w]+? 懒惰地搜索您的 body 文本。

(?=^\.\w+|^#>) 直到它向前看并找到以另一个 header 文本开头的行或以 header 结束标记开头的行。

请注意,如果使用贪婪量词 + 而不是 +?,它将继续匹配直到它可以匹配的最后一个可能的实例。

text = '<#\n.SYNOPSIS\nThis is the block of code that I would like to have matched along with the .SYNOPSIS header, ' \
       'as this block belongs to SYNOPSIS\n .NOTES\n This block needs to belong with\nNOTES ' \
       'header\n.SOMEOTHERHEADER\nAnd resulting text\n\n#> '
pattern = "(\.[A-Z]+\n)+"
import re

print(re.split(pattern, text))

如果我没看错你的问题,我用下面的方法解决了。这样你就有了一个列表,其中包含你需要通过清理字符串追加到你的字典中的所有元素,当然。