在Powershell中拆分带有可变空白字符的字符串

时间:2014-05-06 13:29:14

标签: powershell

我想拆分一个字符串女巫有一个可变的空格字符,但是我想消除很多空行。 这段代码

$text = "Video  Video  Audio  Audio  VBI    VBI"
$text.Split()

输出此

Video

Video

Audio

Audio

VBI



VBI

PS H:\>

我想要这个

Video
Video
Audio  
Audio
VBI
VBI

很晚编辑:
注意到这个问题仍然有很多观点,所以我想澄清一下,当我提出这个问题时,我对功能编程或正则表达式一无所知。
这里提到的所有解决方案都适用,因为有多种方法可以删除空格并从字符串中创建数组。

6 个答案:

答案 0 :(得分:28)

您可以使用PowerShell的-split运算符,该运算符使用正则表达式。

"Video  Video  Audio  Audio  VBI    VBI" -split '\s+'

如@StijnDeVos所述,这不会删除前导/尾随空格。

此处,\s表示空格字符,+与其中一个或多个匹配。更有理由选择@ user3554001的答案。

另一种选择是过滤空字符串。

 "Video  Video  Audio  Audio  VBI    VBI".split()| where {$_}

答案 1 :(得分:14)

您可以使用此代码段消除空行:

$text.split(" ",[System.StringSplitOptions]::RemoveEmptyEntries)

答案 2 :(得分:13)

-split "Video Video Audio Audio VBI VBI"

答案 3 :(得分:4)

试一试,它在执行split命令之前用一个实例替换一个空格的多个实例:

$($text -replace '\s+', ' ').split()

答案 4 :(得分:2)

-split运算符采用正则表达式参数,因此只需匹配多个空白字符(\ s +):

$Text = $text = "Video  Video  Audio  Audio  VBI    VBI"
$text -split '\s+' -match '\S'

Video
Video
Audio
Audio
VBI
VBI

在最后一个之后的任何尾随空格可能会留下一个空条目,因此-match将消除只有空格的任何内容。

答案 5 :(得分:1)

其他解决方案:

$text -split ' ' | where {$_.Trim() -ne ''}

或:

$text.Split(' ').Where({$_.Trim() -ne ''})