.net 匹配某个标题下的任何内容,直到下一个标题-Regex Powershell

.net 匹配某个标题下的任何内容,直到下一个标题-Regex Powershell,.net,regex,powershell,.net,Regex,Powershell,我正在尝试创建一个正则表达式,用于捕获标题之间的任何内容,例如: ***** Heading1 ******** content more content more content ***** Heading2 ******** content more content more content ... 我只是想澄清一下,在每一部分中,我都试图抓住 content more content more content (顺便说一句,内容也可能超过3行) 我找到了另一篇文章,类似地描述了我遇

我正在尝试创建一个正则表达式,用于捕获标题之间的任何内容,例如:

***** Heading1 ********
content
more content
more content

***** Heading2 ********
content
more content
more content

...
我只是想澄清一下,在每一部分中,我都试图抓住

content
more content
more content
(顺便说一句,内容也可能超过3行)

我找到了另一篇文章,类似地描述了我遇到的问题,但我无法操纵这个表达式来实现我想要它做的事情。这篇文章可以在这里找到:

我想用一个表达式来匹配除了标题以外的所有内容,例如,可能是这样的!?(\*(.*)\*)但这也不是我想要的。

$s=@'
$s = @'
***** Heading1 ********
content
more content
more content

***** Heading2 ********
content
more content
more content

'@

[regex]::Matches($s, "^\*+ (?<Heading>.*?) \*+`r`n(?<Content>.*?)`r?`n\s*`r?`n", 'singleline, multiline') | 
    ForEach-Object {

        $_.Groups['Heading'].Value
        $_.Groups['Content'].Value
        "--" 

    }
*****标题1******** 内容 更多内容 更多内容 *****标题2******** 内容 更多内容 更多内容 '@ [regex]:匹配($s,“^\*+(?*?)\*+`r`n(?.*?`r?`n\s*`r?`n”,'singleline,multiline')| ForEach对象{ $\组['Heading'].值 $\.Groups['Content'].Value "--" }
正则表达式不是解析标记的正确工具

正如您所看到的,标记的规范比只查找星号更复杂

您可以在这里看到markdown解析器是如何实现的


您可以选择一个现成的库,或者如果您打算这样做,那么最好为它编写一个合适的解析器。

如果文件不太大,并使用
'(?m)^\*{3,}Heading\*{3,}'
regex拆分,则将整个文件读入内存。