如何从Powershell中的值中提取非常特定的字符串?

如何从Powershell中的值中提取非常特定的字符串?,powershell,Powershell,如何编写一个一刀切的powershell脚本,从字符串中提取特定的数字? 假设我有3台计算机,它们的名称是GT0104MTR、GT0040MTR和GT0444MTR。 数字104、40和444是我要提取的字符 我如何忽略任何前导零并从数字开始和结束的位置抓取,即使数字以零结束 我希望这是有意义的,谢谢你为我指出了正确的方向 对于您提供的字符串,这应该可以: $strings = "GT0104MTR","GT0040MTR","GT0444MTR" $strings | ForEach-Obj

如何编写一个一刀切的powershell脚本,从字符串中提取特定的数字? 假设我有3台计算机,它们的名称是GT0104MTR、GT0040MTR和GT0444MTR。 数字104、40和444是我要提取的字符

我如何忽略任何前导零并从数字开始和结束的位置抓取,即使数字以零结束


我希望这是有意义的,谢谢你为我指出了正确的方向

对于您提供的字符串,这应该可以:

$strings = "GT0104MTR","GT0040MTR","GT0444MTR"

$strings | ForEach-Object {
    if($_ -match '0*(?<Number>([1-9][0-9]*))') {
        $matches.Number
    }
}
注:

输入中带有所有零号的标识符,如GT0000MTR(如有),将被忽略。
对于您提供的字符串,这应该可以:

$strings = "GT0104MTR","GT0040MTR","GT0444MTR"

$strings | ForEach-Object {
    if($_ -match '0*(?<Number>([1-9][0-9]*))') {
        $matches.Number
    }
}
注:

输入中带有所有零号的标识符,如GT0000MTR(如有),将被忽略。
这里有一个稍微不同的方法,它使用-replace去掉非数字,然后去掉前导零。[咧嘴笑]

输出

104
40
444
555
666
1001

这里有一个稍微不同的方法,它使用-replace去掉非数字,然后去掉前导零。[咧嘴笑]

输出

104
40
444
555
666
1001

要提供简洁的备选方案,请执行以下操作:

注:

如果存在所有零编号的标识符,例如GT0000MTR,则从中提取0

与此相反,它忽略了此类标识符


由于标识符是计算机名,因此我觉得不太可能遇到所有零数字。

提供一个简洁的替代方法:

注:

如果存在所有零编号的标识符,例如GT0000MTR,则从中提取0

与此相反,它忽略了此类标识符

然而,由于标识符是计算机名,所以遇到所有零数字对我来说是不太可能的

PS> 'GT0104MTR', 'GT0040MTR', 'GT0444MTR' -replace '.*\D0*(\d+).*', '$1'
104
40
444