所以我一直在学习PowerShell,我有时会在Reddit的PowerShell论坛上提问,但人们经常抱怨我的帖子质量(缺乏代码块)。
我真的很喜欢这个论坛,我从阅读帖子中学到了很多东西,但我有时也想发帖并提出问题,所以我努力编写了一个PowerShell程序,它将以markdown文件作为输入,并按照Reddit期望的方式正确格式化代码块。
程序应该使用-replace
操作符,删除反引号并在每行前加上四个空格(\s
)。所以如果我有一个InputExample.txt
,看起来像这样:
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
...
Get-Childitem -Path 'c:\temp\test.ps1'
Get-Childitem -Path 'c:\temp\test.ps1'
Get-Childitem -Path 'c:\temp\test.ps1'
...
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
...
MouseGetPos, Xpos, Ypos
WinWait, %Window%
WinGetPos,,, Width, Height
MouseGetPos, X, Y
...
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
xxxxxxxxxx
...
Hello := "Hello World"
Test := Hello ~= "Hello" ? "Yes, Match!" (Word_Count := 2) : "No Match!"
OutputDebug, % "Test : "Test
OutputDebug, % "Word count is : "Word_Count
...
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
...
Test : Yes, Match!2
Word count is : 2
...
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
请将...
解释为三个反引号,我不完全理解如何在Markdown中转义它们。
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
Get-Childitem -Path 'c:\temp\test.ps1'
Get-Childitem -Path 'c:\temp\test.ps1'
Get-Childitem -Path 'c:\temp\test.ps1'
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MouseGetPos, Xpos, Ypos
WinWait, %Window%
WinGetPos,,, Width, Height
MouseGetPos, X, Y
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
xxxxxxxxxx
Hello := "Hello World"
Test := Hello ~= "Hello" ? "Yes, Match!" (Word_Count := 2) : "No Match!"
OutputDebug, % "Test : "Test
OutputDebug, % "Word count is : "Word_Count
xxxxxxxxxxxxxxxxxxxxxxxxx
`xxxxxxxxxx`
Test : Yes, Match!2
Word count is : 2
xxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx
`xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`
我的RegEx知识并不比我的PowerShell知识强多少,我试过:
$Myvar = Get-Content -path '.\InputExample.txt' -Raw
#`$Myvar -replace "^```\n..*````" # Will not execute no matter what I try :/
`$Myvar -replace "^```\n(.*)```", "$1" # Same issue as above
$Myvar -replace '`{3}(\r?\n)', ' $1 ' # This partially works
我在最后一次尝试中已经足够接近了,我设法选择了`````中的所有代码(包括反引号本身),但是尝试在每行前面加上一个带有' $1 '
的退格符并没有达到我的预期。
有人能帮我吗?谢谢。
1条答案
按热度按时间nbnkbykc1#
您可能会发现使用带有匹配求值器的正则表达式替换(也称为脚本块替换)更容易,基本上您可以让您的匹配求值器将捕获组
1
的每行开头替换为4个空格。假设我们将提供的示例存储在变量
$string
中,并且我们使用-Raw
开关读取文件内容:在PowerShell 6+中,您可以执行以下操作:
在Windows PowerShell 5.1中,您需要直接调用API: