【发布时间】:2020-09-05 18:19:29
【问题描述】:
我正在尝试格式化 Markdown 文件,以便在标题后有一个空行,该文件是 UTF8 编码与 CRLF 换行符,这里是示例文件:
## DESCRIPTION
description entry...
## EXAMPLES
### EXAMPLE 1
```
some example here...
```
## OUTPUTS
## NOTES
这里我要查找所有后面没有空行的标题,
假设文件名是file.md 这是示例代码,其唯一目的是匹配缺少空行的标题:
$FileData = Get-Content file.md
if ($FileData -match '(?m)^#+\s.*$\s*^.+') { $Matches }
预期输出:
## DESCRIPTION
### EXAMPLE 1
## OUTPUTS
实际输出:
<no output>
其他正则表达式尝试如下,但均无效:
(?m)^#+\s.*\n*^.+
(?m)^#+\s.*\r\n*^.+
^#+\s.*$(?=\n^.+)
^#+\s.*$(?=\r\n^.+)
^#+\s.*$(?=\s^.+)
没有匹配项,这些正则表达式应该可以工作,因为只需对 VSCode 进行少量修改,它们就可以正常工作,但在 PowerShell 中却不行,例如:
^#+\s.*$(?=\n^.+) 在 VSCode 引擎上工作得很好,\n 用于 VSCode 但在 PowerShell 中应该使用 (?m) 或 \r\n 或 \n 但这些构造都不起作用。
我确信有人对此有答案,但请在您的答案中说明为什么 (?m) 和 \r\n 都不起作用以及如何在这种特定情况下使用它们?
编辑:
根据 Wiktor 的评论,我尝试了他的建议,但没有给我想要的结果:
$FileData = Get-Content file.md -Raw
foreach ($Line in $FileData) {
if ($Line -match '^#+\s.*$(?=\s^.+)') { $Matches }
}
我尝试了此处发布的所有示例正则表达式,但输出错误或全部没有输出
【问题讨论】:
-
你需要将整个文件读入一个变量,
$FileData = Get-Content file.md -Raw -
谢谢,我编辑了我的问题,仍然有问题。
-
我明白了,
if ($FileData -match '(?m)^#+\s.*$\s*^.+') { $Matches }返回第一个匹配项,需要弄清楚如何获取所有匹配项.. 感谢您的评论! -
您仍然做错了:您需要将整个文本作为一个字符串发送到正则表达式。
标签: regex powershell visual-studio-code multiline