我对Powershell刚起步,所以毫无疑问,我所做的事情确实很愚蠢,导致我无法使它真正起作用……但是经过一小时的奋斗,我还是很乐意的。 / p>
我有一个文件,其中三重换行符(两个空行)标记了边界。我只想要边界之后的所有内容。
我最近无果的尝试看起来像这样:
$content = Get-Content -Raw $Path
$content = $content -Replace '^.+`r`n`r`n`r`n', ''
我所有匹配单个新行的尝试都失败了。 -Raw参数是因为我开始理解这会改变换行的处理方式,但没有任何改变。
我也知道正则表达式并不理想;我想使其不贪心,但由于我不熟悉Powershell支持的任何正则表达式,因此我想首先获得一个超基本测试用例。 (我想我可以在+后面加一个?来解决这个问题,但首先要解决这个问题。)
目标是出发
useless metadata I don't care about
more useless metadata
actual content
对此:
actual content
我在做什么错了?
答案 0 :(得分:2)
'`r`n'
是原义4字符字符串,而"`r`n"
是换行2字符字符串。您的模式与任何换行符都不匹配。在Powershell正则表达式模式中,使用\r
匹配CR和\n
匹配LF更安全。
还要注意,字符串的开头和定界符之间有几行,但是.
默认不与换行符匹配,您需要一个(?s)
内联修饰符才能使{{1} }也匹配换行符。
使用
.
详细信息
$content -replace '(?s)^.*?(?:\r?\n){3}'
-单行选项,也使(?s)
匹配换行符.
-字符串的开头^
-任意0个以上的字符,尽可能少.*?
-三重CRLF / LF换行符。请参见.NET regex demo。