首页 > 解决方案 > 如何仅在空行上拆分

问题描述

假设我有一个.txt这样的文件:

abc:def ghi:jkl
xyz-www fff

grz,ggg,ewqe
dgokd fddfs

ssokpwe_klk

我想要将其读入 PowerShell,并按每个空行将其拆分为对象,因此最后我应该在这样的数组中包含三个对象:

# Object 1
abc:def ghi:jkl
xyz-www fff
#Object 2
grz,ggg,ewqe
dgokd fddfs
#Object3
ssokpwe_klk

我尝试了以下内容:

通过这三种方式读入文件:

Get-Content "D:\a.txt"
Get-Content "D:\a.txt" -Raw
Get-Content "D:\a.txt" | Out-String

并拆分以下方式:

.split("\n{2,}")
.split(([System.Environment]::NewLine + [System.Environment]::NewLine))
.split("\r\n\r\n")

但是,它总是不仅在空白的白线上分裂,而且在对象内部也分裂。

我怎么能真的只在空行上拆分,我需要如何阅读我的内容?

标签: powershellsplitparagraph

解决方案


您可以使用运算符执行以下-split操作:

(Get-Content a.txt -Raw) -split '(?:\r?\n){2,}'

解释:

使用-Rawswitch 将文件作为一个字符串读取。(?:)是一个非捕获组,以便在拆分时删除匹配的换行符。空行可能只是换行符(CR 匹配\r和/或 LF 匹配\n)。\r?如果您的文件中没有 CR 字符,仍将匹配。{2,}匹配两个或多个先前的匹配。

使用该.Split()方法,您不能使用正则表达式语法,因为它不会解释它。Split(Params char[] separator)重载不能识别连续的字符序列。它将每个输入字符串用作字符数组。然后它将为每个匹配的字符应用拆分。所以'hithereagain'.Split('there')与 有相同的结果'hithereagain'.Split('eerth')


推荐阅读