Powershell - 从字符串创建数组 - 用新行分隔文本块

Powershell - Create array from string - separating blocks of text by new lines

我在变量中有一个字符串:

$Test = @"
Paragraph 1: some paragraph text
some paragraph text some paragraph text
some paragraph text some paragraph text

Paragraph 2: some paragraph text
some paragraph text some paragraph text
some paragraph text some paragraph text

Paragraph 3: some paragraph text
some paragraph text some paragraph text
some paragraph text some paragraph text
"@

段落数可能不确定。

段落始终以换行符分隔。

我需要将每个段落文本块分隔到一个新的数组变量中。

示例:

$Array[1] 应该给我第 2 段的整个文本块。

谢谢!

由两个或多个连续的换行符分割:

# Pipe to 
#  | ForEach-Object { "[$_]" } 
# to visualize the resulting array elements.
$test -split '(?:\r?\n){2,}'

有关传递给 -split operator and the ability to experiment with it, see this regex101.com page 的正则表达式的解释。

注:

  • 如果您可以假设输入字符串中仅存在 Unix-format LF (\n) 换行符,则可以将正则表达式简化为 '\n{2,}' -上面的正则表达式处理 LF 和 Windows CRLF (\r\n) 换行符。

  • 如果最后一段恰好包含要从数组中删除的单个尾随换行符(如果您阅读包含 Get-Content -Raw 的完整文本文件通常会发生这种情况),使用:

    # Note: If you need to preserve trailing *non-newline* whitespace,
    #       use .TrimEnd("`r", "`n") instead.
    ($test -split '(?:\r?\n){2,}').TrimEnd()