在PowerShell中拆分不带分隔符的字符串

时间:2016-05-10 04:16:08

标签: string powershell split powershell-v2.0

我想拆分字符串并将生成的标记存储在变量中。

例如,我的字符串为160519,我想以160519存储在单独变量中的方式将其拆分。< / p>

我尝试使用-split,但由于我的字符串没有分隔符,我发现很难剪切字符串。

3 个答案:

答案 0 :(得分:7)

如果你使用正则表达式,你实际上可以像这样分割字符串。

$arr = $string -split "(..)" -ne ""

.匹配任何单个字符。然后,我们需要过滤数组以删除-ne ""所在的空值(感谢mklement0,以获取替换| ? {$_}的建议)。

行动中:

C:\Users\Paarth> $string = "160519"
C:\Users\Paarth> $arr = $string -split "(..)" -ne ""
C:\Users\Paarth> $arr
16
05
19
C:\Users\Paarth>

答案 1 :(得分:4)

如果您没有分隔符,则无法使用-split。相反,你必须使用类似的东西:

$d = '160519'
$a, $b, $c = $d.SubString(0, 2), $d.SubString(2, 2), $d.SubString(4, 2)

# (That is like doing:
$a = $d.SubString(0, 2)
$b = $d.SubString(2, 2)
$c = $d.SubString(4, 2)
# but doing all three in one go )

停在这里,这就是你所需要的。 : - )

除此之外:你可以从一个字符串中索引多个字符,但是它们作为单独的字符出现,并且每个字符都需要再次连接回字符串,因此它不整洁而且不够清晰:

$d = '160519'
$a, $b, $c = ($d[0..1] -join ''), ($d[2..3] -join ''), ($d[4..5] -join '')

[编辑:我想,如果你真的在乎,你可以强迫-split为你工作,因为你可以用正则表达式描述两个数字。这样做的问题是你通常根据查找分隔符,抛出分隔符并保留其余部分进行拆分。如果你想保留分隔符,你可以使用正则表达式组来完成它,但是-split将输出它认为内容应该是的空白空间,因此需要一个丑陋的解决方法才能使它工作:

# split based on a regular expression describing two digits \d\d
# capture the digits in a group (\d\d)
# Filter the output through Where-Object   |?
# Only the numbers will pass, the empty space won't
$a, $b, $c = $d -split '(\d\d)' |? {$_}

或者使用.Net [Regex]库更正常地使用正则表达式:

$a, $b, $c = [Regex]::Matches($d, '\d\d') | Select -ExpandProperty Value

或在PowerShell中

$d -match '(\d\d)(\d\d)(\d\d)'
$a, $b, $c = $matches[1,2,3]

# hey, this one's pretty nice.

答案 2 :(得分:0)

试试这个

$text="160519"
$var0, $var1, $var2, $var3= $text -split "(\d{2})(\d{2})(\d{2})"
$var1
$var2
$var3