从阵列中删除零

时间:2018-01-23 16:05:02

标签: powershell

我注意到,如果'版本'以零结束,然后该零被删除。

因此,例如,如果&#39;版本&#39; $statusContent1.9.7.680$version1.9.7.68$version = $statusContent.Content.Substring(145).TrimEnd('" counter="0" /></mibscalar>') 。有没有办法保持零?

<mibscalar name="appRunningApp" type="readonly" link= "xxx.xxx.xxx.xxx/v1/mib/objs/appRunningApp?type=xml"; ><data index="1" value="ma xtime - 1.9.7.680" counter="0" /></mibscalar>

示例字符串:

website

2 个答案:

答案 0 :(得分:3)

TrimEnd()不是您正在寻找的功能 - 它将字符串参数转换为字符数组,并从每个字符串结尾处消除每个任何字符的出现。字符串,直到找不到它为止。

使用Remove()来切断尾随部分:

$string = $statusContent.Content.Substring(145)
$tail = '" counter="0" /></mibscalar>'

if($string.EndsWith($tail)){
    # [string]::Remove() takes a start index as it's first argument
    # Let's calculate the index at which we'll start removing characters
    $string = $string.Remove($string.Length - $tail.Length)
}

答案 1 :(得分:0)

为什么不使用正则表达式?

> $txt
<mibscalar name="appRunningApp" type="readonly" link= "127.0.0.2/v1/mib/objs/appRunningApp?type=xml"; ><data index="1" value="ma xtime - 1.9.7.680" counter="0" /></mibscalar>

> if ($txt -match '\d+[.]\d+[.]\d+[.]\d+(?=\")') { $version = $matches[0] }

> $version
1.9.7.680

修改

既然我知道xxx.xxx.xxx.xxx位是一个IP地址,我必须在上面的代码中更改正则表达式以避免匹配它。 IP地址在模式上与版本太相似,无法区分它们。

我添加了一个前瞻(?=\"),仅当"跟随模式时才匹配。只要引号在版本号后立即关闭,它就会起作用。您可以在另一个选项中使用否定前瞻(?!\/),以确保/ 遵循模式,以确保它不是<IP>/<path>种类字符串。