about_Split
Krótki opis
W tym artykule wyjaśniono, jak za pomocą operatora Split podzielić jeden lub więcej ciągów na podciąg.
Długi opis
Operator Split dzieli jeden lub więcej ciągów na podciąg. Możesz zmienić następujące elementy operacji Podziel:
- Ogranicznik. Wartość domyślna to białe znaki, ale można określić znaki, ciągi, wzorce lub bloki skryptu, które określają ogranicznik. Operator Split w programie PowerShell używa wyrażenia regularnego w ograniczniku, a nie prostego znaku.
- Maksymalna liczba podciągów. Wartość domyślna to zwracanie wszystkich podciągów. Jeśli określisz liczbę mniejszą niż liczba podciągów, pozostałe podciągy zostaną łączone w ostatnim podciągu.
- Opcje określające warunki dopasowania ogranicznika, takie jak SimpleMatch i Multiline.
Składnia
Na poniższym diagramie przedstawiono składnię operatora -split.
Nazwy parametrów nie są wyświetlane w poleceniu . Uwzględnij tylko wartości parametrów. Wartości muszą być wyświetlane w kolejności określonej na diagramie składniowym.
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
Można zastąpić -iSplit
lub -cSplit
w -split
dowolnej binarnej instrukcji Split (instrukcja Split, która zawiera ogranicznik lub blok skryptu). Operatory -iSplit
i -split
nie są uwzględniane wielkości liter. Operator -cSplit
uwzględnia wielkość liter, co oznacza, że wielkość liter jest uwzględniana podczas stosowania reguł ogranicznika.
Parametry
<Ciąg> lub <ciąg[]>
Określa jeden lub więcej ciągów do podziału. Jeśli prześlesz wiele ciągów, wszystkie ciągi zostaną podzielone przy użyciu tych samych reguł ogranicznika.
Przykład:
-split "red yellow blue green"
red
yellow
blue
green
<Ogranicznik>
Znaki identyfikujące koniec podciągów. Domyślny ogranicznik to odstępy, w tym spacje i znaki niedrukowalne, takie jak nowy wiersz (n) i tabulator (nie). Gdy ciągi są dzielone, ogranicznik zostanie pominięty ze wszystkich podciągów. Przykład:
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
Domyślnie ogranicznik jest pomijany z wyników. Aby zachować cały ogranicznik lub część ogranicznika, należy ująć w nawiasy część, którą chcesz zachować.
<Max-substrings>
Jeśli parametr zostanie dodany, ma to pierwszeństwo, gdy polecenie dzieli kolekcję. Jeśli zdecydujesz się dołączyć ogranicznik jako część danych wyjściowych, polecenie zwróci ogranicznik jako część danych wyjściowych; jednak podzielenie ciągu w celu zwrócenia ogranicznika w ramach danych wyjściowych nie jest liczone jako podział.
Przykłady:
"Lastname:FirstName:Address" -split "(:)"
Lastname
:
FirstName
:
Address
"Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
<Max-substrings>
Określa maksymalną liczbę podciągów zwracanych przez operację podziału. Wartość domyślna to wszystkie podciągi podzielone przez ogranicznik. Jeśli istnieje więcej podciągów, są one łączone z ostatnim podciągem. Jeśli jest mniej podciągów, zwracane są wszystkie podciągy. Wartość 0 zwraca wszystkie podciągy.
Przykład:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
Jeśli do operatora zostanie przesłany więcej niż jeden ciąg (tablica ciągów), -split
Max-substrings
limit zostanie zastosowany do każdego ciągu oddzielnie.
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
a
b
c
1
2
3,4,5
<Max-substrings>
nie określa maksymalnej liczby zwracanych obiektów. W poniższym przykładzie <Max-substrings>
ustawiono wartość 3.
Powoduje to wyświetlenie trzech wartości podciągów, ale łącznie pięć ciągów w wynikowych danych wyjściowych. Ogranicznik jest uwzględniany po podziałach do momentu osiągnięcia maksymalnie trzech podciągów. Dodatkowe ograniczniki w ostatnim podciągu stają się częścią podciągów.
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
Wartości ujemne zwracają liczbę podciągów żądanych od końca ciągu wejściowego.
Uwaga
Obsługa wartości ujemnych została dodana w programie PowerShell 7.
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", -5
Mercury,Venus,Earth,Mars
Jupiter
Saturn
Uranus
Neptune
<ScriptBlock>
Wyrażenie określające reguły stosowania ogranicznika. Wyrażenie musi mieć wartość $true lub $false. Ujmij blok skryptu w nawiasach klamrowych.
Przykład:
$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
<Opcje>
Należy ująć nazwę opcji w znaki cudzysłowu. Opcje są prawidłowe tylko wtedy, gdy <parametr Max-substrings> jest używany w instrukcji .
Składnia parametru Opcje to:
"SimpleMatch [,IgnoreCase]"
"[RegexMatch] [,IgnoreCase] [,CultureInvariant]
[,IgnorePatternWhitespace] [,ExplicitCapture]
[,Singleline | ,Multiline]"
Opcje SimpleMatch są następujące:
- SimpleMatch: użyj prostego porównania ciągów podczas oceniania ogranicznika. Nie można używać z funkcją RegexMatch.
- IgnoreCase: Wymusza dopasowanie bez uwzględniania wielkości liter, nawet jeśli określono operator -cSplit.
Opcje RegexMatch są następujące:
- RegexMatch: użyj dopasowania wyrażenia regularnego, aby ocenić ogranicznik. Jest to zachowanie domyślne. Nie można używać z funkcją SimpleMatch.
- IgnoreCase: Wymusza dopasowanie bez uwzględniania wielkości liter, nawet jeśli określono operator -cSplit.
- CultureInvariant: ignoruje różnice kulturowe w języku podczas oceniania ogranicznika. Prawidłowe tylko w regexMatch.
- IgnorePatternWhitespace: ignoruje niewyobrażalne odstępy i komentarze oznaczone znakiem numeru (#). Prawidłowe tylko w regexMatch.
- Wielowierszowy: tryb wielowierszowy wymusza
^
i$
pasuje do początku każdego wiersza zamiast początku i końca ciągu wejściowego. - Jednoliniowy: tryb jednoliniowy traktuje ciąg wejściowy jako pojedynczy wiersz.
.
Wymusza dopasowanie znaku do każdego znaku (w tym nowego wiersza) zamiast dopasowywania każdego znaku z wyjątkiem nowego wiersza\n
. - ExplicitCapture: ignoruje nienazwane grupy dopasowania, tak aby tylko jawne grupy przechwytywania zostały zwrócone na liście wyników. Prawidłowe tylko w regexMatch.
OPERATORY JEDNOARGUMENTOWE i BINARNE SPLIT
Operator podziału jednoargumentowego (-split <string>
) ma wyższy priorytet niż przecinek. W związku z tym, jeśli prześlesz rozdzieloną przecinkami listę ciągów do jednoargumentowego operatora podziału, zostanie podzielony tylko pierwszy ciąg (przed pierwszym przecinkiem).
Użyj jednego z następujących wzorców, aby podzielić więcej niż jeden ciąg:
- Użyj binarnego operatora podziału (<string[]> -split <delimiter>)
- Ujmij wszystkie ciągi w nawiasach
- Zapisz ciągi w zmiennej, a następnie prześlij zmienną do operatora podziału
Rozpatrzmy następujący przykład:
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
Przykłady
Poniższa instrukcja dzieli ciąg na białe znaki.
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
Poniższa instrukcja dzieli ciąg na dowolny przecinek.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
Poniższa instrukcja dzieli ciąg na wzorzec "er".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
Poniższa instrukcja wykonuje podział wielkości liter w literze "N".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
Poniższa instrukcja dzieli ciąg na "e" i "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
Poniższa instrukcja dzieli ciąg na "e" i "r", ale ogranicza wynikowe podciągy do sześciu podciągów.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
Poniższa instrukcja dzieli ciąg na trzy podciągy.
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
Poniższa instrukcja dzieli ciąg na trzy podciągy rozpoczynające się od końca ciągu.
"a,b,c,d,e,f,g,h" -split ",", -3
a,b,c,d,e,f
g
h
Poniższa instrukcja dzieli dwa ciągi na trzy podciągy. (Limit jest stosowany do każdego ciągu niezależnie).
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
Poniższa instrukcja dzieli każdy wiersz w ciągu here-string na pierwszą cyfrę. Używa opcji Wielowierszowej do rozpoznawania początku każdego wiersza i ciągu.
Wartość 0 reprezentuje wartość "return all" parametru Max-substrings. Można użyć opcji, takich jak Multiline, tylko wtedy, gdy zostanie określona wartość maksymalna podciągów.
$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.
Poniższa instrukcja używa znaku ukośnika odwrotnego, aby uniknąć ogranicznika kropki (.).
W przypadku wartości domyślnej RegexMatch kropka ujęta w cudzysłów (".") jest interpretowana tak, aby pasowała do dowolnego znaku z wyjątkiem znaku nowego wiersza. W rezultacie instrukcja Split zwraca pusty wiersz dla każdego znaku z wyjątkiem nowego wiersza.
"This.is.a.test" -split "\."
This
is
a
test
Poniższa instrukcja używa opcji SimpleMatch, aby skierować operator -split do interpretowania ogranicznika kropki (.) dosłownie.
Wartość 0 reprezentuje wartość "return all" parametru Max-substrings. Można użyć opcji, takich jak SimpleMatch, tylko wtedy, gdy zostanie określona wartość Maksymalna liczba podciągów.
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
Poniższa instrukcja dzieli ciąg na jeden z dwóch ograniczników, w zależności od wartości zmiennej.
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip