如何用PowerShell将Markdown代码块转为Reddit要求的格式?
解决Markdown代码块转Reddit格式的PowerShell脚本
可行解决方案
以下脚本可准确将Markdown的三个反引号代码块转换为Reddit要求的「每行前缀四个空格」格式:
$content = Get-Content -Path '.\InputExample.txt' -Raw # 匹配并处理所有三个反引号包裹的代码块 $processedContent = $content -replace '(?s)(^|\n)`{3}\n(.*?)\n`{3}', { # 将代码块内容按行拆分,每行添加四个空格前缀 $indentedLines = ($args[0].Groups[2].Value -split '\r?\n') | ForEach-Object { " $_" } # 用空行分隔转换后的代码块与其他内容 "`n`n" + ($indentedLines -join "`n") + "`n`n" } # 清理多余的连续空行,保证格式整洁 $processedContent = $processedContent -replace '\n{3,}', "`n`n" # 将结果写入输出文件 $processedContent | Set-Content -Path '.\OutputResult.txt' -Encoding UTF8
原尝试失败原因分析
- 单行正则限制:你之前用的
^```\n(.*)````属于单行匹配,.*`无法识别换行符,只能处理单行代码块,完全不适用于多行内容。 - 局部替换不彻底:
{3}(\r?\n)仅替换了开头的反引号和换行,既没处理代码块内的每行,也没移除结尾的三个反引号,自然达不到预期效果。
脚本核心逻辑说明
Get-Content -Raw:一次性读取整个文件内容,保留原始换行符,确保跨行代码块能被完整匹配。(?s):开启正则的「单行模式」,让.可以匹配换行符,实现跨行内容的捕获。- 脚本块替换:通过脚本块对捕获到的代码内容逐行处理,为每行添加四个空格前缀,同时用空行分隔转换后的代码块与其他文本。
- 空行清理:用
\n{3,}匹配连续三个及以上空行,替换为两个空行,保证输出格式与示例一致。
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

