删除所有内容,包括三行换行符

时间:2019-02-25 10:32:44

标签: regex powershell

我对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

我在做什么错了?

1 个答案:

答案 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换行符。

enter image description here

请参见.NET regex demo