我想拆分字符串并将生成的标记存储在变量中。
例如,我的字符串为160519
,我想以16
,05
和19
存储在单独变量中的方式将其拆分。< / p>
我尝试使用-split
,但由于我的字符串没有分隔符,我发现很难剪切字符串。
答案 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