我收到來自VSO(使用TFPT.exe)一個字符串,可以是項目數量還是項目數量加一個字母如何將字符串轉換爲int,如果可能的話在PowerShell中?
「830」或「830A」
我怎樣才能斷絕如果存在信 - 和轉換爲數字爲int
$a = 830
#or
$a = 830
$b = "a"
我試圖測試,如果「830」是一個數字 - 但我想,因爲它拉它作爲一個字符串,我不知道怎麼問:這個字符串可以是int嗎?
我收到來自VSO(使用TFPT.exe)一個字符串,可以是項目數量還是項目數量加一個字母如何將字符串轉換爲int,如果可能的話在PowerShell中?
「830」或「830A」
我怎樣才能斷絕如果存在信 - 和轉換爲數字爲int
$a = 830
#or
$a = 830
$b = "a"
我試圖測試,如果「830」是一個數字 - 但我想,因爲它拉它作爲一個字符串,我不知道怎麼問:這個字符串可以是int嗎?
這是我已經能夠拿出,接縫處最好的工作:沒有縫的最有效的方法...
$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}
假設只有數字的一組,你可以-match
那很容易與正則表達式。 \ d +將匹配一組連續的數字。
PS C:\temp> "830a" -match "\d+"
True
PS C:\temp> $matches[0]
830
知道你可以在你的代碼中加入類似這樣的東西。
$b = If($a -match "\d+"){[int]$matches[0]}
很明顯,使用更好的變量名會更合適,但這只是概念證明。如果字母位於字符串的中間,寫入時會導致問題。只要號碼被分組在一起,它將以任何方式工作。
另一種方式,你可以做到這一點將是取代所有非數字字符。
$a = "830adasdf"
$a = $a -replace "\D" -as [int]
\ D表示任何非數字字符。 -as [int]
將執行演員。
無論哪種情況,[int]
都會將剩下的數字字符串轉換爲整數。
,如果你保證,它僅僅是在年底,可能是有那麼你可以使用字符串方法.TrimEnd()
以及一個字符。它刪除由char數組確定的字符串末尾的所有字符。讓我們給它一個所有字母的數組。在實踐中,這是有案例的問題,所以我們採取字符串,將其轉換爲大寫,然後刪除任何結尾的字母。
"830z".ToUpper().TrimEnd([char[]](65..99)) -as [int]
它實際上似乎數量陣列自動轉換燒焦所以這會做一樣的
"830z".ToUpper().TrimEnd(65..99) -as [int]
@ MathiasR.Jessen也就是說更簡潔。切記不要多使用'-as' – Matt