使用电源外壳的子字符串中不需要的空间



我对PS相当陌生:我正在从多个xml文件($ABB(中提取字段。 $net var 基于模式搜索,并在第 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 前面的空格,它对应于$net变量。我无法自己解决这个问题,我的方法可能都是错误的。我愿意接受任何和所有建议。感谢您的帮助。

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

您需要选择不为空的行:

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

解释:

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

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

您可以在下面看到空行条件的示例:

123 -split 1
23
123 -split 1 -ne ''
23

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

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

最新更新