.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拆分,则将整个文件读入内存。