Сведения о разбиении
Объясняет, как использовать оператор Split для разделения одной или нескольких строк на подстроки.
Оператор Split разделяет одну или несколько строк на подстроки. Вы можете изменить следующие элементы операции разбиения:
- Разделитель. По умолчанию используется пробел, но можно указать символы, строки, шаблоны или блоки скриптов, указывающие разделитель. Оператор Split в Windows PowerShell использует регулярное выражение в разделителе, а не простой символ.
- Максимальное число подстрок. По умолчанию возвращаются все подстроки. Если указать число, меньшее числа подстрок, оставшиеся подстроки объединяются в последнюю подстроку.
- Параметры, определяющие условия, при которых будет сопоставляться разделитель, например SimpleMatch и Multiline.
На следующей схеме показан синтаксис оператора-split.
Имена параметров не отображаются в команде. Включайте только значения параметров. Значения должны присутствовать в порядке, указанном в схеме синтаксиса.
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
Можно заменить -iSplit
или -cSplit
для -split
в любой инструкции двоичного разделения (оператор разбиения, включающий разделитель или блок сценария). В -iSplit
-split
операторах и регистр не учитывается. В -cSplit
операторе учитывается регистр, что означает, что при применении правил разделителей учитывается регистр.
Указывает одну или несколько строк для разбиения. При отправке нескольких строк все строки разбиваются с помощью одних и тех же правил разделителей.
Пример.
-split "red yellow blue green"
red
yellow
blue
green
Символы, которые обозначают конец подстроки. По умолчанию разделителем являются пробелы, включая пробелы и непечатаемые символы, например символ новой строки ( ` n) и знак табуляции ( ` t). При разбиении строк разделитель опускается из всех подстрок. Пример.
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
По умолчанию разделитель в результатах опускается. Чтобы сохранить все или часть разделителя, заключите в круглые скобки часть, которую необходимо сохранить. Если <Max-substrings> параметр добавлен, это имеет приоритет, если команда разделяет коллекцию. Если включить разделитель как часть выходных данных, команда возвращает разделитель в составе выходных данных. Однако разделение строки для возврата разделителя в качестве части выходных данных не учитывается в качестве разбиения.
Примеры
"Lastname:FirstName:Address" -split "(:)"
Lastname
:
FirstName
:
Address
"Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
В следующем примере <Max-substrings> значение равно 3. Это приводит к трем разбиениям строковых значений, но всего за пять строк в результирующем выводе; разделитель включается после разбиения до тех пор, пока не будет достигнуто максимально допустимое число из трех подстрок. Дополнительные разделители в конечной подстроке становятся частью подстроки.
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
Указывает максимальное число разбиений строки. По умолчанию используются все подстроки, разделенные разделителем. Если подстроки больше, они объединяются с конечной подстрокой. Если число подстрок меньше, возвращаются все подстроки. Значение 0 и отрицательные значения возвращают все подстроки.
Параметр max-substring не задает максимальное число возвращаемых объектов. его значение равно максимальному количеству разделений строки. При отправке в оператор Split более одной строки (массива строк) ограничение Max-substring применяется к каждой строке отдельно.
Пример.
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
Выражение, задающее правила для применения разделителя. Выражение должно иметь значение $true или $false. Заключите блок скрипта в фигурные скобки.
Пример.
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split {$_ -eq "e" -or $_ -eq "p"}
M
rcury,V
nus,
arth,Mars,Ju
it
r,Saturn,Uranus,N
tun
Заключите имя параметра в кавычки. Параметры допустимы только в том случае, если <Max-substrings> параметр используется в инструкции.
Для параметра options используется следующий синтаксис:
"SimpleMatch [,IgnoreCase]"
"[RegexMatch] [,IgnoreCase] [,CultureInvariant]
[,IgnorePatternWhitespace] [,ExplicitCapture]
[,Singleline | ,Multiline]"
Параметры SimpleMatch:
- SimpleMatch: Используйте простое сравнение строк при вычислении разделителя. Не может использоваться с Режексматч.
- IgnoreCase: принудительное сопоставление без учета регистра, даже если указан оператор-ксплит.
Параметры Режексматч:
- Режексматч: используйте сопоставление регулярных выражений для вычисления разделителя. Это поведение установлено по умолчанию. Не может использоваться с SimpleMatch.
- IgnoreCase: принудительное сопоставление без учета регистра, даже если указан оператор-ксплит.
- CultureInvariant: игнорирует культурные различия в языке, если оценка разделитель. Допустимо только с Режексматч.
- IgnorePatternWhitespace: игнорирует неэкранированные пробелы и комментарии, помеченные знаком решетки (#). Допустимо только с Режексматч.
- Многострочный: многострочный режим заставляет
^
и$
сопоставлять начальную конец каждой строки, а не начало и конец входной строки. - SingleLine: режим SingleLine обрабатывает входную строку как SingleLine.
Он заставляет
.
символ соответствовать каждому символу (включая символы новой строки) вместо того, чтобы сопоставлять каждый символ, кроме символа новой строки\n
. - ExplicitCapture: игнорирует неименованные группы соответствия, чтобы в списке результатов возвращались только явные группы записи. Допустимо только с Режексматч.
Примечание
SingleLine является поведением по умолчанию. Singleline и Multiline не могут использоваться вместе с параметром Options. Это было решено в PowerShell 6,0. Обходной обходной проблемы является использование модификаторов режима в регулярном выражении. Дополнительные сведения об модификаторах режима см. в статье Параметры регулярных выражений .
Оператор унарного разбиения ( -split <string>
) имеет более высокий приоритет, чем запятая. В результате, если отправить разделенный запятыми список строк в оператор унарного разбиения, то разбиение выполняется только на первую строку (перед первой запятой).
Чтобы разделить более одной строки, используйте один из следующих шаблонов:
- Использование оператора двоичного разделения ( <string[]> -Split <delimiter> )
- Заключите все строки в круглые скобки
- Сохранить строки в переменной, а затем отправить переменную оператору Split
Рассмотрим следующий пример.
PS> -split "1 2", "a b"
1
2
a b
PS> "1 2", "a b" -split " "
1
2
a
b
PS> -split ("1 2", "a b")
1
2
a
b
PS> $a = "1 2", "a b"
PS> -split $a
1
2
a
b
Следующая инструкция разделяет строку на пробел.
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
Следующая инструкция разделяет строку на любую запятую.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Следующая инструкция разделяет строку на шаблоне "ER".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
Следующая инструкция выполняет разбиение с учетом регистра по букве "N".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
Следующая инструкция разделяет строку на "e" и "t".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[et]'
M
rcury,V
nus,
ar
h,Mars,Jupi
r,Sa
urn,Uranus,N
p
un
Следующая инструкция разделяет строку на "e" и "r", но ограничивает результирующие подстроки до шести подстрок.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
Следующая инструкция разделяет строку на три подстроки.
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
Следующая инструкция разделяет две строки на три подстроки. (Ограничение применяется к каждой строке независимо друг от друга.)
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
Следующая инструкция разделяет каждую строку в строке Here в первой цифре. Он использует многострочный параметр для распознавания начала каждой строки и строки.
0 представляет значение "вернуть все" для параметра max-substring. Параметры, например Multiline, можно использовать, только если указано значение Max-substring.
$a = @'
1The first line.
2The second line.
3The third of three lines.
'@
$a -split "^\d", 0, "multiline"
The first line.
The second line.
The third of three lines.
Следующая инструкция использует символ обратной косой черты для экранирования разделителя с точкой (.).
При использовании значения по умолчанию Режексматч точка, заключенная в кавычки ("."), интерпретируется так, чтобы соответствовать любому символу, кроме символа новой строки. В результате инструкция Split возвращает пустую строку для каждого символа, кроме новой строки.
"This.is.a.test" -split "\."
This
is
a
test
В следующей инструкции используется параметр SimpleMatch для направления оператора-split на интерпретацию разделителя с точкой (.) буквально.
0 представляет значение "вернуть все" для параметра max-substring. Параметры, такие как SimpleMatch, можно использовать, только если указано значение Max-substring.
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
Следующая инструкция разделяет строку на один из двух разделителей в зависимости от значения переменной.
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip