如果可能,如何在powershell中将字符串转换为int?

如果可能,如何在powershell中将字符串转换为int?,powershell,powershell-4.0,azure-devops,Powershell,Powershell 4.0,Azure Devops,我正在使用TFPT.exe从VSO获取一个字符串,该字符串可以是项目编号或项目编号加上一个字母 830或830a 如果字母存在,我如何将其断开-并将数字转换为int $a = 830 #or $a = 830 $b = "a" 我试着测试830是否是一个数字,但我猜,因为它把它作为一个字符串拉进来,我不知道如何问:这个字符串是整数吗 这是我能想到的最好的方法,接缝工作:接缝不是最有效的方法 $t = $parent.Substring($parent.Length-1) if($t -

我正在使用TFPT.exe从VSO获取一个字符串,该字符串可以是项目编号或项目编号加上一个字母

830或830a

如果字母存在,我如何将其断开-并将数字转换为int

$a = 830
#or
$a = 830
$b = "a"

我试着测试830是否是一个数字,但我猜,因为它把它作为一个字符串拉进来,我不知道如何问:这个字符串是整数吗

这是我能想到的最好的方法,接缝工作:接缝不是最有效的方法

    $t = $parent.Substring($parent.Length-1)
if($t -in @("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"))
{
    [int]$parentSRP = $parent.Substring(0,$parent.Length-1)
    $parentVer = $parent.Substring($parent.Length-1,1)
}
else{[int]$parentSRP = $parent}

假设只有一组数字,你可以很容易地与正则表达式匹配。其中\d+将匹配一组连续数字

PS C:\temp> "830a" -match "\d+"
True

PS C:\temp> $matches[0]
830
知道可以在代码中包含类似的内容

$b = If($a -match "\d+"){[int]$matches[0]}
显然,使用更好的变量名更合适,但这只是概念的证明。如果alpha字符位于字符串的中间,这样写会引起一个问题。只要数字组合在一起,它就可以以任何一种方式工作

另一种方法是替换所有不是数字的字符

$a = "830adasdf"
$a = $a -replace "\D" -as [int]
\D表示任何非数字字符-as[int]将执行演员阵容

在任何一种情况下,[int]都会将剩余的数字字符串转换为整数

如果您可以保证它的末尾可能只有一个字符,那么您也可以使用string方法.TrimEnd。它删除由字符数组确定的字符串末尾的所有字符。让我们给它一个所有字母的数组。实际上,这是因为大小写有问题,所以我们使用字符串,将其转换为大写,然后删除任何尾随字母

"830z".ToUpper().TrimEnd([char[]](65..99)) -as [int]
实际上,它似乎自动地将数字数组转换为字符,所以这也会做同样的事情

"830z".ToUpper().TrimEnd(65..99) -as [int]

@MathiasR.Jessen那更简洁。永远不要忘记使用-作为最终解决方案,将比特率转换为有效的整数。谢谢