我注意到,如果'版本'以零结束,然后该零被删除。
因此,例如,如果'版本' $statusContent
中1.9.7.680
为$version
,1.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
答案 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>
种类字符串。