从字符串中提取 replace/delete 个字符的更简单方法

Simpler way to replace/delete characters from string

起初我有这段代码获取一个对象并显示特定的行。我得到的是这条线:

 @{      "id": "nic-1867724-4351584-0",=}

现在我使用了 -replace 我可以得到我最初想要的部分:

 nic-1867724-4351584-0

这是给我干净的代码。

 $interfaceID = skytap vm show 4370436
 $interfaceID = Out-String | Select-Object ($stream -like "*nic-[0-9]*")[0]
 $right = $interfaceID -replace "....$"
 $interfaceID = $right -replace "@{.............",""
 Write-Host $interfaceID

有更好的方法吗?以防万一该字符串上有 more/less 个数字。

您可以尝试使用正则表达式,例如将 nic* 捕获到下一个 " :

$s='@{      "id": "nic-1867724-4351584-0",=}'
$nic=[regex]::match($s,'(nic-(.)*?)"').Groups[1].value

第一个选项

$s='@{      "id": "nic-1867724-4351584-0",=}'
$s-replace'@|,='|ConvertFrom-Json

第二个选项

$s='@{      "id": "nic-1867724-4351584-0",=}'
$s-replace'",=}'-replace'.+"'