2016-04-26 42 views

回答

5

你可以使用一個簡單的正則表達式(demo)來匹配兩個字符,並與第一個替換:

$s -replace '(.).', '$1' 

輸出

ace 

如果你想有個字符,只需將其強制轉換爲char[]

[char[]] ($s -replace '(.).', '$1') 

拆分字符串(感謝PetSerAl):

$s -replace '(.).', '$1' -split '(?!^|$)' 
+0

這裏終於ü[R只有形成的字符串。如果我們想要檢索字符怎麼辦? – Madhusudan

+0

我更新了我的答案,您可以如何檢索字符。我還添加了一個正則表達式演示。基本上,我捕捉到第一個字符並用捕獲的字符替換前兩個字符。 –

+2

'-split''' - >'-split'(?!^ | $)''不能產生兩個空字符串。 – PetSerAl

2

不知道,如果是簡單的,但它是不同的:

$s = "abcdef" 
for ($i = 0; $i -lt $s.Length; $i++) 
{ 
    if ($i % 2 -ne 0) 
    { 
     $s[$i] 
    } 
} 
3

愛的正則表達式的答案,但希望包括的東西,使用的管道越來越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將完成相同的事情,並取決於更具可讀性。

+0

不錯的解決方案....找到另一種方法。非常感謝:) – Madhusudan

+0

好馬特。我也嘗試使用流水線和數組算法來解決這個問題,但卻陷入了困境(我錯過了Where-Object)。 –

3

另一種可能性:

$string = 'abcdefg' 
$i=0 
([char[]]$string).where({$i++ %2}) 
b 
d 
f 
+0

++;請注意未來的讀者:這種_method_語法 - 一種更快,更靈活的替代方法,可替代「Where-Object」_cmdlet_ - 需要PSv4 +。你可以閱讀更多[這裏](http://www.powershellmagazine.com/2014/10/22/foreach-and-where-magic-methods/)。 – mklement0

+0

還有一種方法...謝謝@ mklement0 :) – Madhusudan

+0

@Rushikesh:謝謝,但值得信賴的是這個答案的作者,mjolinor - 我只是提供了_supplemental_信息。 – mklement0

相關問題