Если у вас нет разделителя, вы не можете с пользой использовать -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)' |? {$_}
или А более стандартное использование регулярных выражений с [Regex] библиотеки .Net:
$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.
]
использование [подстроки] (https://msdn.microsoft.com/en-us/library/system.string.substring%28v = vs.110% 29.aspx) – lloyd