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 Dzielenie:

  • 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 są łączone w ostatnim podciągnie.
  • Opcje określające warunki, w których jest dopasowywany ogranicznik, na przykład 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ł ograniczników.

Parametry

<Ciąg> lub <ciąg[]>

Określa co najmniej jeden ciąg, który ma być podzielony. W przypadku przesyłania wielu ciągów wszystkie ciągi są dzielone przy użyciu tych samych reguł ograniczników.

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 newline (n) i tabulator (nie). Po podzieleniu ciągów 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 liczba podciągów jest mniejsza, 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), -splitMax-substrings limit zostanie zastosowany osobno do każdego ciągu.

$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. Spowoduje 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 końcowego podciągu stają się częścią podciągów.

'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry

Wartości ujemne zwracają żądaną ilość podciągów rozpoczynających się 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>

Dołącz nazwę opcji w cudzysłowie. 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 obliczania 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. To jest 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 białe znaki 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 pojedynczą linię. . Wymusza dopasowanie znaku do każdego znaku (w tym nowych linii) 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 rozdzielaną przecinkami listę ciągów do operatora podziału jednoargumentowego, 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 (<ciąg[]> -split <ogranicznik>)
  • Ujęć wszystkie ciągi w nawiasy
  • Zapisz ciągi w zmiennej, a następnie prześlij zmienną do operatora podziału

Rozważmy 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 na literę "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 tutaj 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 określono wartość Max-substrings.

$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 w celu zinterpretowania ogranicznika kropki (.) dosłownie.

Wartość 0 reprezentuje wartość "return all" parametru Max-substrings. Można użyć opcji, takich jak SimpleMatch, tylko wtedy, gdy określono wartość Max-substrings.

"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

Zobacz też