2016-02-02 26 views
-1

我收到來自VSO(使用TFPT.exe)一個字符串,可以是項目數量還是項目數量加一個字母如何將字符串轉換爲int,如果可能的話在PowerShell中?

「830」或「830A」

我怎樣才能斷絕如果存在信 - 和轉換爲數字爲int

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

我試圖測試,如果「830」是一個數字 - 但我想,因爲它拉它作爲一個字符串,我不知道怎麼問:這個字符串可以是int嗎?

回答

0

這是我已經能夠拿出,接縫處最好的工作:沒有縫的最有效的方法...

$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} 
3

假設只有數字的一組,你可以-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] 
+1

@ MathiasR.Jessen也就是說更簡潔。切記不要多使用'-as' – Matt

相關問題