.net - 如何将字符串拆分为不带多个空格的字符串数组

标签 .net powershell split powershell-2.0

我有来自文本框的字符串 $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

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

最佳答案

正如您所发现的,您可以删除最后一次出现 * 之后的“空白”条目。与 [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"

关于.net - 如何将字符串拆分为不带多个空格的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31764593/

相关文章:

c# - 为什么我不能在 C# 中重载 += 运算符?但我还能用吗?

.net - 文化变化带来的问题

powershell - 将格式表与pscustomobject一起使用

javascript - 将分组对象数组平均分成两部分

asp.net - System.Web.WebPages dll 的新版本

c# - Microsoft ReportViewer 2012 引用

PHP preg_split Apache 和 Powershell 等价物

windows - 如何使用 Get-Counter 一次返回多个性能计数器?

python - 匹配文件名后撤消 files.split (python 3.x)

java - 如何使用 Java 将数组参数设置为变量