如何从PowerShell中的字符串中获取交替的字符?

时间:2016-04-26 11:35:56

标签: string powershell character

我正在编写一个脚本,我必须从字符串中读取交替的字符。

我使用以下方法:

$s = "abcdef"
$chars = $s.ToCharArray()
For( $i = 0; $i -lt $chars.Count; $i = $i + 2){
    $chars[$i]
}

是否有更简单的方法,尤其是基于管道的方法?

4 个答案:

答案 0 :(得分:5)

您可以使用简单的正则表达式(demo)匹配两个字符并将其替换为第一个字符:

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

输出

ace

如果您想拥有角色,只需将其投放到char[]

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

拆分字符串(感谢PetSerAl):

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

答案 1 :(得分:3)

喜欢正则表达式的答案,但希望包含更多使用管道的内容和Select-Object

$string = "abcdef" 
[char[]]$string | Select-Object -Index (0..($string.Length-1) | Where-Object{$_ % 2})

-Index获取字符串的长度并返回用于从char数组中提取字符的奇数数组。使用!($_ % 2)将交替返回的集合。在这两种情况下,我都在利用模数运算符返回的值。如果在上面的例子中数字是偶数,则返回0,其值为false。 $_ % 2 -eq $false将完成同样的事情并且更具可读性。

答案 2 :(得分:3)

另一种可能性:

    Dim totalAges As Integer = 0
    For i As Integer = 0 To intAge.Count - 1
        totalAges += intAge(i)
    Next
    averageAge = totalAges / intAge.Count 'averageAge = 43.6

答案 3 :(得分:2)

不确定它是否更简单,但它有所不同:

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