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()
我在变量中有一个字符串:
$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()