使用 powershell 在子字符串中不需要 space

Unwanted space in substring using powershell

我是 PS 的新手:我正在从多个 xml 文件 ($ABB) 中提取字段。 $net var 基于模式搜索和 returns 第 2 行的非静态子字符串。这是我目前所拥有的:

    $ABB = If ($aa -eq $null ) {"nothing to see here"} else {
    $count = 0
    $files = @($aa)
      foreach ($f in $files)
      {
         $count += 1

         $mo=(Get-Content -Path $f )[8].Substring(51,2) 
         (Get-Content -Path $f | Select-string -Pattern $lf -Context 0,1) |  ForEach-Object {
         $net = $_.Context.PostContext
         $enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>"
         $enet = $enet.trim()}

         Write-Host "$mo-nti-$lf-$enet" "`r`n"

       }}

输出如下所示:03-nti-260-8409。 请注意 8409 前面的 space 对应于 $net 变量。我自己无法解决这个问题,我的方法可能都是错误的。我愿意接受任何和所有的建议。谢谢你的帮助。

只需使用 -replace 即可删除任何空格 例如:

'03-nti-260- 8409' -replace '\s'
<#
# Results
03-nti-260-8409
#>

由于$net = $_.Context.PostContext之后$net的第一行中的第一个字符包含拆分字符,因此将输出一个空行作为输出的第一个元素。然后,当您对输出进行字符串化时,每个拆分输出项都由一个 space.

连接

您需要 select 行不为空:

$enet = $net -split "<comm:FieldValue>(\d*)</comm:FieldValue>" -ne ''

解释:

-Split 未被 () 包围的字符从输出中删除,剩余的字符串从每个匹配的字符中拆分为多个元素。当匹配的字符开始或结束字符串时,将输出一个空行。如果不需要,必须小心删除这些线。 Trim() 将不起作用,因为 Trim() 适用于单个字符串而不是数组,并且不会删除空字符串。

在命令末尾添加 -ne '',删除空行。这只是一个内联布尔条件,当应用于数组时,仅输出条件为真的元素。

您可以在下面查看空行情况的示例:

123 -split 1

23

123 -split 1 -ne ''
23