【问题标题】:How to split string to an array of strings without multiple spaces如何将字符串拆分为没有多个空格的字符串数组
【发布时间】:2015-08-02 02:34:01
【问题描述】:

我有来自 TextBox 的字符串 $x

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

我运行:$a = $x.Split("*") 但我在“7-zip”中收到了双空格:

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

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

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

但是没有帮助:

如何将字符串拆分为以“*”分隔的字符串数组?

【问题讨论】:

    标签: .net powershell split powershell-2.0


    【解决方案1】:

    如您所见,您可以使用[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"
    

    【讨论】:

    • 制作正则表达式\*`n?,你不需要额外的Trim()调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2023-01-26
    • 1970-01-01
    相关资源
    最近更新 更多