我正在研究一个脚本,我必须从字符串中读取交替字符。如何从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