我正在研究一個腳本,我必須從字符串中讀取交替字符。如何從PowerShell中的字符串中獲取交替字符?
我使用以下方法:
$s = "abcdef"
$chars = $s.ToCharArray()
For($i = 0; $i -lt $chars.Count; $i = $i + 2){
$chars[$i]
}
有沒有一種簡單的方法,尤其是基於管道?
我正在研究一個腳本,我必須從字符串中讀取交替字符。如何從PowerShell中的字符串中獲取交替字符?
我使用以下方法:
$s = "abcdef"
$chars = $s.ToCharArray()
For($i = 0; $i -lt $chars.Count; $i = $i + 2){
$chars[$i]
}
有沒有一種簡單的方法,尤其是基於管道?
你可以使用一個簡單的正則表達式(demo)來匹配兩個字符,並與第一個替換:
$s -replace '(.).', '$1'
輸出:
ace
如果你想有個字符,只需將其強制轉換爲char[]
:
[char[]] ($s -replace '(.).', '$1')
或拆分字符串(感謝PetSerAl):
$s -replace '(.).', '$1' -split '(?!^|$)'
不知道,如果是簡單的,但它是不同的:
$s = "abcdef"
for ($i = 0; $i -lt $s.Length; $i++)
{
if ($i % 2 -ne 0)
{
$s[$i]
}
}
愛的正則表達式的答案,但希望包括的東西,使用的管道越來越Select-Object
$string = "abcdef"
[char[]]$string | Select-Object -Index (0..($string.Length-1) | Where-Object{$_ % 2})
-Index
取串和換貨政...的長度rns和用於從char數組中提取字符的奇數數組。使用!($_ % 2)
將替換返回的集合。在這兩種情況下,我都利用模運算符返回的值。如果這個數字在上面的例子中甚至是0,那麼返回值爲false。 $_ % 2 -eq $false
將完成相同的事情,並取決於更具可讀性。
不錯的解決方案....找到另一種方法。非常感謝:) – Madhusudan
好馬特。我也嘗試使用流水線和數組算法來解決這個問題,但卻陷入了困境(我錯過了Where-Object)。 –
另一種可能性:
$string = 'abcdefg'
$i=0
([char[]]$string).where({$i++ %2})
b
d
f
++;請注意未來的讀者:這種_method_語法 - 一種更快,更靈活的替代方法,可替代「Where-Object」_cmdlet_ - 需要PSv4 +。你可以閱讀更多[這裏](http://www.powershellmagazine.com/2014/10/22/foreach-and-where-magic-methods/)。 – mklement0
還有一種方法...謝謝@ mklement0 :) – Madhusudan
@Rushikesh:謝謝,但值得信賴的是這個答案的作者,mjolinor - 我只是提供了_supplemental_信息。 – mklement0
這裏終於ü[R只有形成的字符串。如果我們想要檢索字符怎麼辦? – Madhusudan
我更新了我的答案,您可以如何檢索字符。我還添加了一個正則表達式演示。基本上,我捕捉到第一個字符並用捕獲的字符替換前兩個字符。 –
'-split''' - >'-split'(?!^ | $)''不能產生兩個空字符串。 – PetSerAl