Udostępnij za pośrednictwem


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), -splitMax-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

Zobacz też