about_Split
Descrizione breve
Viene illustrato come usare l'operatore Split per suddividere una o più stringhe in sottostringhe.
Descrizione lunga
L'operatore Split suddivide una o più stringhe in sottostringhe. È possibile modificare gli elementi seguenti dell'operazione di divisione:
- Delimitatore. Il valore predefinito è uno spazio vuoto, ma è possibile specificare caratteri, stringhe, modelli o blocchi di script che specificano il delimitatore. L'operatore Split in PowerShell usa un'espressione regolare nel delimitatore anziché un carattere semplice.
- Numero massimo di sottostringhe. L'impostazione predefinita consiste nel restituire tutte le sottostringhe. Se si specifica un numero minore del numero di sottostringhe, le sottostringhe rimanenti vengono concatenate nell'ultima sottostringa.
- Opzioni che specificano le condizioni in cui viene trovata la corrispondenza del delimitatore, ad esempio SimpleMatch e Multiline.
Sintassi
Il diagramma seguente illustra la sintassi per l'operatore -split.
I nomi dei parametri non vengono visualizzati nel comando . Includere solo i valori dei parametri. I valori devono essere visualizzati nell'ordine specificato nel diagramma della sintassi.
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
È possibile sostituire -iSplit
o -cSplit
per -split
in qualsiasi istruzione split binaria (un'istruzione Split che include un delimitatore o un blocco di script). Gli -iSplit
operatori e non fanno distinzione tra maiuscole e -split
minuscole. L'operatore -cSplit
fa distinzione tra maiuscole e minuscole, ovvero viene considerato quando vengono applicate le regole del delimitatore.
Parametri
<String o <String>[]>
Specifica una o più stringhe da dividere. Se si inviano più stringhe, tutte le stringhe vengono suddivise usando le stesse regole del delimitatore.
Esempio:
-split "red yellow blue green"
red
yellow
blue
green
<Delimitatore>
Caratteri che identificano la fine di una sottostringa. Il delimitatore predefinito è uno spazio vuoto, inclusi spazi e caratteri non stampabili, ad esempio nuova riga ('n) e tabulazioni ('t). Quando le stringhe vengono suddivise, il delimitatore viene omesso da tutte le sottostringhe. Esempio:
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
Per impostazione predefinita, il delimitatore viene omesso dai risultati. Per mantenere tutto o parte del delimitatore, racchiudere tra parentesi la parte che si desidera mantenere.
Se il <Max-substrings>
parametro viene aggiunto, questa operazione ha la precedenza quando il comando divide la raccolta. Se si sceglie di includere un delimitatore come parte dell'output, il comando restituisce il delimitatore come parte dell'output; Tuttavia, la divisione della stringa per restituire il delimitatore come parte dell'output non viene conteggiata come divisione.
Esempi:
"Lastname:FirstName:Address" -split "(:)"
Lastname
:
FirstName
:
Address
"Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
<Max-substrings>
Specifica il numero massimo di sottostringhe restituite dall'operazione di divisione. Il valore predefinito è tutte le sottostringhe suddivise in base al delimitatore. Se sono presenti più sottostringhe, vengono concatenate alla sottostringa finale. Se sono presenti meno sottostringhe, vengono restituite tutte le sottostringhe. Il valore 0 restituisce tutte le sottostringhe.
Esempio:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
Se si inviano più stringhe (una matrice di stringhe) all'operatore -split
, il Max-substrings
limite viene applicato a ogni stringa separatamente.
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
a
b
c
1
2
3,4,5
<Max-substrings>
non specifica il numero massimo di oggetti restituiti. Nell'esempio seguente, <Max-substrings>
è impostato su 3.
Ciò comporta tre valori di sottostringa, ma un totale di cinque stringhe nell'output risultante. Il delimitatore viene incluso dopo le divisioni fino a raggiungere il massimo di tre sottostringhe. I delimitatori aggiuntivi nella sottostringa finale diventano parte della sottostringa.
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
I valori negativi vengono ignorati.
<ScriptBlock>
Espressione che specifica le regole per l'applicazione del delimitatore. L'espressione deve restituire $true o $false. Racchiudere il blocco di script tra parentesi graffe.
Esempio:
$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
<Opzioni>
Racchiudere il nome dell'opzione tra virgolette. Le opzioni sono valide solo quando il <parametro Max-substrings> viene usato nell'istruzione .
La sintassi per il parametro Options è:
"SimpleMatch [,IgnoreCase]"
"[RegexMatch] [,IgnoreCase] [,CultureInvariant]
[,IgnorePatternWhitespace] [,ExplicitCapture]
[,Singleline | ,Multiline]"
Le opzioni SimpleMatch sono:
- SimpleMatch: usare un confronto di stringhe semplice durante la valutazione del delimitatore. Non può essere usato con RegexMatch.
- IgnoreCase: forza la corrispondenza senza distinzione tra maiuscole e minuscole, anche se viene specificato l'operatore -cSplit.
Le opzioni RegexMatch sono:
- RegexMatch: usare la corrispondenza delle espressioni regolari per valutare il delimitatore. Questo è il comportamento predefinito. Non può essere usato con SimpleMatch.
- IgnoreCase: forza la corrispondenza senza distinzione tra maiuscole e minuscole, anche se viene specificato l'operatore -cSplit.
- CultureInvariant: ignora le differenze culturali nella lingua durante la valutazione del delimitatore. Valido solo con RegexMatch.
- IgnorePatternWhitespace: ignora gli spazi vuoti senza caratteri di escape e i commenti contrassegnati con il segno di numero (#). Valido solo con RegexMatch.
- Multilinea: la modalità multilinea forza
^
e$
deve corrispondere alla fine iniziale di ogni riga anziché all'inizio e alla fine della stringa di input. - Singleline: la modalità a riga singola considera la stringa di input come singleline.
Forza il
.
carattere a corrispondere a ogni carattere (incluse le nuove righe), invece di corrispondere a ogni carattere EXCEPT la nuova riga\n
. - ExplicitCapture: ignora i gruppi di corrispondenza non denominati in modo che vengano restituiti solo gruppi di acquisizione espliciti nell'elenco dei risultati. Valido solo con RegexMatch.
Nota
SingleLine è il comportamento predefinito. Non è possibile usare la riga singola e multilinea insieme al parametro options. Questo problema è stato risolto in PowerShell 6.0. La soluzione alternativa consiste nell'usare i modificatori mode nell'espressione regolare. Per altre informazioni sui modificatori di modalità, vedere Opzioni di espressione regolare
OPERATORI DI DIVISIONE UNARIA e BINARIA
L'operatore split unario (-split <string>
) ha una precedenza maggiore rispetto a una virgola. Di conseguenza, se si invia un elenco delimitato da virgole di stringhe all'operatore di divisione unario, viene divisa solo la prima stringa (prima della prima virgola).
Usare uno dei modelli seguenti per suddividere più di una stringa:
- Usare l'operatore binary split (<string[]> -split <delimiter>)
- Racchiudere tutte le stringhe tra parentesi
- Archiviare le stringhe in una variabile e quindi inviare la variabile all'operatore split
Si consideri l'esempio seguente:
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
Esempi
L'istruzione seguente divide la stringa in corrispondenza degli spazi vuoti.
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
L'istruzione seguente divide la stringa in qualsiasi virgola.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
L'istruzione seguente divide la stringa in corrispondenza del criterio "er".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
L'istruzione seguente esegue una divisione con distinzione tra maiuscole e minuscole alla lettera "N".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
L'istruzione seguente suddivide la stringa in "e" 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
L'istruzione seguente suddivide la stringa in "e" e "r", ma limita le sottostringhe risultanti a sei sottostringhe.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
L'istruzione seguente suddivide una stringa in tre sottostringhe.
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
L'istruzione seguente suddivide due stringhe in tre sottostringhe. Il limite viene applicato a ogni stringa in modo indipendente.
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
L'istruzione seguente divide ogni riga nella stringa here alla prima cifra. Usa l'opzione Multiline per riconoscere l'inizio di ogni riga e stringa.
Il valore 0 rappresenta il valore "return all" del parametro Max-substrings. È possibile usare opzioni, ad esempio Multiline, solo quando viene specificato il valore 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.
L'istruzione seguente usa il carattere barra rovesciata per eseguire l'escape del delimitatore punto (.).
Con il valore predefinito RegexMatch, il punto racchiuso tra virgolette (".") viene interpretato in modo che corrisponda a qualsiasi carattere, ad eccezione di un carattere di nuova riga. Di conseguenza, l'istruzione Split restituisce una riga vuota per ogni carattere tranne la nuova riga.
"This.is.a.test" -split "\."
This
is
a
test
L'istruzione seguente usa l'opzione SimpleMatch per indirizzare l'operatore -split a interpretare letteralmente il delimitatore punto (.).
Il valore 0 rappresenta il valore "return all" del parametro Max-substrings. È possibile usare opzioni, ad esempio SimpleMatch, solo quando viene specificato il valore Max-substrings.
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
L'istruzione seguente suddivide la stringa in uno dei due delimitatori, a seconda del valore di una variabile.
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip