如何用PowerShell正则拆分文件块并存入数组?
拆分文件块并存储到数组(支持多行块)
核心思路:用临时集合逐行收集分隔符之间的多行内容,遇到分隔符时将临时集合的内容存入目标数组,最后处理未被分隔符收尾的末尾块。以下提供两种常见场景的实现方案:
方案1:每个块存储为多行字符串
适合需要将块作为完整文本使用的场景,合并块内的所有行成单个字符串。
# 初始化存储所有块的数组 $blockArray = @() # 临时存储当前块的行内容 $currentBlockLines = @() # 定义块分隔符 $separator = "===BLOCK_END===" # 读取目标文件内容(-Raw参数保留原始换行符) $content = Get-Content -Path "input.txt" -Raw # 逐行处理内容 foreach ($line in $content -split "`r?`n") { # 匹配分隔符(Trim()处理可能存在的前后空白) if ($line.Trim() -eq $separator) { # 若当前块有内容,合并为多行字符串后加入数组 if ($currentBlockLines.Count -gt 0) { $blockArray += $currentBlockLines -join "`n" $currentBlockLines = @() # 重置临时集合 } } else { # 跳过空行(可选,根据业务需求调整) if (-not [string]::IsNullOrWhiteSpace($line)) { $currentBlockLines += $line } } } # 处理最后一个未被分隔符收尾的块 if ($currentBlockLines.Count -gt 0) { $blockArray += $currentBlockLines -join "`n" } # 输出结果查看 $blockArray
方案2:每个块存储为行数组
适合需要保留块内每行独立结构的场景,每个块以行数组的形式存入目标数组。
$blockArray = @() $currentBlockLines = @() $separator = "===BLOCK_END===" # 逐行读取文件(不使用-Raw,节省大文件内存占用) $content = Get-Content -Path "input.txt" foreach ($line in $content) { if ($line.Trim() -eq $separator) { if ($currentBlockLines.Count -gt 0) { # 逗号用于将行数组作为单个元素加入,避免被拆分为多个元素 $blockArray += ,$currentBlockLines $currentBlockLines = @() } } else { if (-not [string]::IsNullOrWhiteSpace($line)) { $currentBlockLines += $line } } } # 处理末尾块 if ($currentBlockLines.Count -gt 0) { $blockArray += ,$currentBlockLines } # 格式化输出每个块的内容 $blockArray | ForEach-Object { Write-Host "`n--- 块内容分割线 ---" $_ }
测试示例
测试输入文件(input.txt)内容:
第一块第一行,带特殊字符:!@#$ 第一块第二行 第一块第三行 ===BLOCK_END=== 第二块第一行 第二块第二行(空行测试) 第二块第三行 ===BLOCK_END=== 第三块仅一行
方案1运行结果:
$blockArray包含3个字符串元素:
"第一块第一行,带特殊字符:!@#$n第一块第二行n第一块第三行""第二块第一行n第二块第二行(空行测试)n第二块第三行""第三块仅一行"
方案2运行结果:
$blockArray的每个元素是行数组:
- 第一个元素:
@("第一块第一行,带特殊字符:!@#$", "第一块第二行", "第一块第三行") - 第二个元素:
@("第二块第一行", "第二块第二行(空行测试)", "第二块第三行") - 第三个元素:
@("第三块仅一行")
关键注意事项
- 分隔符匹配时用
Trim(),避免因换行、空格导致的匹配失败 - 必须处理末尾未被分隔符收尾的块,否则会丢失内容
- 方案2中添加行数组到目标数组时,必须用
,$currentBlockLines,否则PowerShell会将行数组的每一行拆分为单独元素存入
内容的提问来源于stack exchange,提问作者Nicholas Saunders
相关产品推荐
相关产品推荐

