2016-04-26 41 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

相关问题