如何将字符串拆分为没有多个空格的字符串数组

时间:2015-08-01 17:58:19

标签: .net powershell split powershell-v2.0

我有来自TextBox的字符串$x
enter image description here

我想将此字符串拆分为不带' *'的字符串数组。

我跑:$a = $x.Split("*")但我在" 7-zip"中收到了双倍空格: enter image description here

建议1:
Here他们建议用户-split 在使用时我收到了一个字符串(字符数组),而不是字符串数组:
enter image description here

建议2:
this博客和this问题中,他们建议使用[System.StringSplitOptions]::RemoveEmptyEntrie + foreach(在博客中)来解析不需要的空格。
我试过了:

$option = [System.StringSplitOptions]::RemoveEmptyEntries
 $b = $x.Split("*", $option) |foreach {
    $_.Split(" ", $option)
}

它没有帮助:
enter image description here

如何将字符串拆分为由" *"分隔的字符串数组? ?

1 个答案:

答案 0 :(得分:4)

如您所知,您可以在*[StringSplitOptions]::RemoveEmptyEntries的最后一次出现后删除“空白”条目。

现在,您需要做的就是删除字词周围不需要的空格,就是致电Trim()

$x = @"
ccleaner*
7-zip*
"@

$Words = $x.Split('*',[StringSplitOptions]::RemoveEmptyEntries) | ForEach-Object {
    $_.Trim()
}

PS C:\> $Words[0]
ccleaner
PS C:\> $Words[0]
7-zip
PS C:\>

您还可以使用-split(只需要一个\来转义*),然后使用Where-Object过滤掉空条目:

"a*b* *c" -split "\*" | Where-Object { $_ -notmatch "^\s+$" }| ForEach-Object { $_.Trim() }

或相反(删除空格后使用Where-Object):

"a*b* *c" -split "\*" | ForEach-Object { $_.Trim() } | Where-Object { $_ }

您还可以使用-replace删除前导和尾随空格(基本上是Trim()的正则表达式版本):

" a b " -replace "^\s+|\s+$",""
# results in "a b"