regex - 删除所有直到并包括三重换行符的内容

标签 regex powershell

我对 Powershell 很陌生,所以我无疑做了一些非常愚蠢的事情,导致我尝试让它工作实际上不起作用......但经过一个小时的挣扎,我很乐意帮忙。

我有一个文件,其中三个换行符(两个空行)标记了边界。我只想要边界之后的所有内容。

我最近的无果尝试如下所示:

$content = Get-Content -Raw $Path
$content = $content -Replace '^.+`r`n`r`n`r`n', ''

我所有匹配单个新行的尝试都失败了。 -Raw 参数是因为我开始明白这会改变处理换行符的方式,但它没有改变任何东西。

我也知道正则表达式并不理想;我想让它变得非贪婪,但考虑到我不熟悉 Powershell 支持的任何风格的正则表达式,我希望首先获得一个 super 基本的测试用例。 (我想我可以在 + 之后添加一个 ? 来解决这个问题,但首先要注意的是。)

目标是从

useless metadata I don't care about
more useless metadata


actual content

对此:

actual content

我做错了什么?

最佳答案

'`r`n' 是一个 4 个字符的字符串,而 "`r`n" 是一个换行符 2 个字符的字符串。您的模式不会匹配任何换行符。在 Powershell 正则表达式模式中,使用 \r 匹配 CR 和 \n 匹配 LF 更安全。

另请注意,字符串开头和分隔符之间有几行,但 . 默认情况下不匹配换行符,您需要一个 (?s) 内联修饰符使 . 也匹配换行符。

使用

$content -replace '(?s)^.*?(?:\r?\n){3}'

详细信息

  • (?s) - 一个单行选项,使 . 也匹配换行符
  • ^ - 字符串的开头
  • .*? - 任意 0 个以上字符,尽可能少
  • (?:\r?\n){3} - 三重 CRLF/LF 换行符。

enter image description here

请参阅.NET regex demo .

关于regex - 删除所有直到并包括三重换行符的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54864183/

相关文章:

javascript - 检测字符串中的 Number、Pi 和 e

arrays - 没有 '.Count'属性的对象-使用@()(数组子表达式运算符)与[Array]类型转换

java - 使用powershell编译和运行java应用程序

java - java中的正则表达式 : find all the groups (? =(ab)|(abc)) in abcdef

powershell - 使用 Powershell 和测试路径,我如何区分 "folder doesn' t 存在”和 "access denied"

powershell - 如何通过powershell将计算机加入域

c# - 使用 C# 将带有快照的虚拟机保留在域中

php - 正则表达式 PHP

javascript - 如何仅在文本区域的开头删除空格和换行符

javascript - 如何从javascript文件中提取javascript函数