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

时间:2017-06-14 17:41:13

标签: .net regex powershell

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

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

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

...

只是为了澄清,在每个部分我试图捕捉

content
more content
more content

(btw也可能超过3行)

我发现另一篇文章同样描述了我所遇到的问题,但我无法操纵该表达式以达到我想要的目的。该帖子可在此处找到:Regex match from start label until empty line or end label

我考虑制作一个与标题相匹配的表达式,例如可能是类似的东西!?(\ *(。*)\ *)但是它并没有做我想要的。

2 个答案:

答案 0 :(得分:0)

$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 :(得分:0)

正则表达式不是解析降价的正确工具

正如您所看到的,降价规范比寻找星号更为复杂http://spec.commonmark.org/0.26/#atx-headings

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

https://github.com/gjtorikian/commonmarker/blob/master/ext/commonmarker/commonmarker.c

你可以选择一个现成的库,或者如果你要去做,那么也可以为它编写一个合适的解析器。