about_Split
Breve descrição
Explica como usar o operador Split para dividir uma ou mais cadeias de caracteres em substrings.
Descrição longa
O operador Split divide uma ou mais cadeias de caracteres em substrings. Você pode alterar os seguintes elementos da operação Split:
- Delimitador. O padrão é espaço em branco, mas você pode especificar caracteres, cadeias de caracteres, padrões ou blocos de script que especificam o delimitador. O operador Split no PowerShell usa uma expressão regular no delimitador, em vez de um caractere simples.
- Número máximo de substrings. O padrão é retornar todas as substrings. Se você especificar um número menor que o número de substrings, as substrings restantes serão concatenadas na última substring.
- Opções que especificam as condições sob as quais o delimitador é correspondido, como SimpleMatch e Multiline.
Sintaxe
O diagrama a seguir mostra a sintaxe para o operador -split.
Os nomes dos parâmetros não aparecem no comando. Inclua apenas os valores dos parâmetros. Os valores devem aparecer na ordem especificada no diagrama de sintaxe.
-Split <String>
-Split (<String[]>)
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]
Você pode substituir -iSplit
ou -cSplit
por -split
em qualquer instrução Split binária (uma instrução Split que inclui um delimitador ou bloco de script). Os -iSplit
operadores e -split
não diferenciam maiúsculas de minúsculas. O -cSplit
operador diferencia maiúsculas de minúsculas, o que significa que esse caso é considerado quando as regras do delimitador são aplicadas.
Parâmetros
<String> ou <String[]>
Especifica uma ou mais cadeias de caracteres a serem divididas. Se você enviar várias cadeias de caracteres, todas as cadeias de caracteres serão divididas usando as mesmas regras de delimitador.
Exemplo:
-split "red yellow blue green"
red
yellow
blue
green
<Delimitador>
Os caracteres que identificam o final de uma substring. O delimitador padrão é espaço em branco, incluindo espaços e caracteres não imprimíveis, como nova linha ('n) e tab ('t). Quando as cadeias de caracteres são divididas, o delimitador é omitido de todas as substrings. Exemplo:
"Lastname:FirstName:Address" -split ":"
Lastname
FirstName
Address
Por padrão, o delimitador é omitido dos resultados. Para preservar todo ou parte do delimitador, coloque entre parênteses a parte que deseja preservar.
Se o <Max-substrings>
parâmetro for adicionado, isso terá precedência quando o comando dividir a coleção. Se você optar por incluir um delimitador como parte da saída, o comando retornará o delimitador como parte da saída; no entanto, dividir a cadeia de caracteres para retornar o delimitador como parte da saída não conta como uma divisão.
Exemplos:
"Lastname:FirstName:Address" -split "(:)"
Lastname
:
FirstName
:
Address
"Lastname/:/FirstName/:/Address" -split "/(:)/"
Lastname
:
FirstName
:
Address
<Max-substrings>
Especifica o número máximo de substrings retornadas pela operação de divisão. O padrão é todas as substrings divididas pelo delimitador. Se houver mais substrings, elas serão concatenadas à substring final. Se houver menos substrings, todas as substrings serão retornadas. Um valor de 0 retorna todas as substrings.
Exemplo:
$c = "Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune"
$c -split ",", 5
Mercury
Venus
Earth
Mars
Jupiter,Saturn,Uranus,Neptune
Se você enviar mais de uma cadeia de caracteres (uma matriz de cadeias de caracteres) para o -split
operador, o Max-substrings
limite será aplicado a cada cadeia separadamente.
$c = 'a,b,c','1,2,3,4,5'
$c -split ',', 3
a
b
c
1
2
3,4,5
<Max-substrings>
não especifica o número máximo de objetos retornados. No exemplo a seguir, <Max-substrings>
é definido como 3.
Isso resulta em três valores de substring, mas um total de cinco strings na saída resultante. O delimitador é incluído após as divisões até que o máximo de três substrings seja atingido. Delimitadores adicionais na substring final tornam-se parte da substring.
'Chocolate-Vanilla-Strawberry-Blueberry' -split '(-)', 3
Chocolate
-
Vanilla
-
Strawberry-Blueberry
Os valores negativos são ignorados.
<ScriptBlock>
Uma expressão que especifica regras para aplicar o delimitador. A expressão deve avaliar para $true ou $false. Coloque o bloco de script em chaves.
Exemplo:
$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
<Opções>
Coloque o nome da opção entre aspas. As opções são válidas somente quando o <parâmetro Max-substrings> é usado na instrução.
A sintaxe para o parâmetro Options é:
"SimpleMatch [,IgnoreCase]"
"[RegexMatch] [,IgnoreCase] [,CultureInvariant]
[,IgnorePatternWhitespace] [,ExplicitCapture]
[,Singleline | ,Multiline]"
As opções do SimpleMatch são:
- SimpleMatch: Use a comparação de cadeia de caracteres simples ao avaliar o delimitador. Não pode ser usado com RegexMatch.
- IgnoreCase: Força a correspondência sem diferenciação de maiúsculas e minúsculas, mesmo que o operador -cSplit seja especificado.
As opções do RegexMatch são:
- RegexMatch: Use a correspondência de expressão regular para avaliar o delimitador. Este é o comportamento predefinido. Não pode ser usado com SimpleMatch.
- IgnoreCase: Força a correspondência sem diferenciação de maiúsculas e minúsculas, mesmo que o operador -cSplit seja especificado.
- CultureInvariant: Ignora as diferenças culturais na língua ao avaliar o delimitador. Válido apenas com RegexMatch.
- IgnorePatternWhitespace: ignora espaços em branco sem escape e comentários marcados com o sinal numérico (#). Válido apenas com RegexMatch.
- Multilinha: O modo multilinha força
^
e$
para corresponder ao fim inicial de cada linha em vez do início e fim da cadeia de entrada. - Singleline: o modo Singleline trata a cadeia de caracteres de entrada como uma SingleLine.
Ele força o
.
personagem a corresponder a todos os caracteres (incluindo novas linhas), em vez de corresponder a todos os caracteres EXCETO a nova linha\n
. - ExplicitCapture: ignora grupos de correspondência não nomeados para que apenas grupos de captura explícitos sejam retornados na lista de resultados. Válido apenas com RegexMatch.
Nota
SingleLine é o comportamento padrão. Singleline e Multiline não podem ser usados em conjunto com o parâmetro options. Isso foi resolvido no PowerShell 6.0. A solução alternativa é usar modificadores de modo em sua expressão regular. Você pode ler mais sobre modificadores de modo em Opções de Expressão Regular
OPERADORES DE DIVISÃO UNÁRIA E BINÁRIA
O operador de divisão unária (-split <string>
) tem maior precedência do que uma vírgula. Como resultado, se você enviar uma lista de cadeias de caracteres separadas por vírgulas para o operador de divisão unária, somente a primeira cadeia de caracteres (antes da primeira vírgula) será dividida.
Use um dos seguintes padrões para dividir mais de uma cadeia de caracteres:
- Use o operador de divisão binário (<string[]> -split <delimiter>)
- Coloque todas as cadeias entre parênteses
- Armazene as cadeias de caracteres em uma variável e, em seguida, envie a variável para o operador de divisão
Considere o seguinte exemplo:
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
Exemplos
A instrução a seguir divide a cadeia de caracteres em espaço em branco.
-split "Windows PowerShell 2.0`nWindows PowerShell with remoting"
Windows
PowerShell
2.0
Windows
PowerShell
with
remoting
A instrução a seguir divide a cadeia de caracteres em qualquer vírgula.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split ','
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
A instrução a seguir divide a cadeia de caracteres no padrão "er".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split 'er'
M
cury,Venus,Earth,Mars,Jupit
,Saturn,Uranus,Neptune
A instrução a seguir executa uma divisão que diferencia maiúsculas de minúsculas na letra "N".
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -cSplit 'N'
Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,
eptune
A instrução a seguir divide a string em "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
A instrução a seguir divide a cadeia de caracteres em "e" e "r", mas limita as substrings resultantes a seis substrings.
"Mercury,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune" -split '[er]', 6
M
cu
y,V
nus,
arth,Mars,Jupiter,Saturn,Uranus,Neptune
A instrução a seguir divide uma cadeia de caracteres em três substrings.
"a,b,c,d,e,f,g,h" -split ",", 3
a
b
c,d,e,f,g,h
A instrução a seguir divide duas cadeias de caracteres em três substrings. (O limite é aplicado a cada cadeia de caracteres independentemente.)
"a,b,c,d", "e,f,g,h" -split ",", 3
a
b
c,d
e
f
g,h
A instrução a seguir divide cada linha na cadeia de caracteres here, no primeiro dígito. Ele usa a opção Multiline para reconhecer o início de cada linha e string.
O 0 representa o valor "return all" do parâmetro Max-substrings. Você pode usar opções, como Multiline, somente quando o valor Max-substrings é especificado.
$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.
A instrução a seguir usa o caractere de barra invertida para escapar do delimitador de pontos (.).
Com o padrão, RegexMatch, o ponto entre aspas (".") é interpretado para corresponder a qualquer caractere, exceto um caractere de nova linha. Como resultado, a instrução Split retorna uma linha em branco para cada caractere, exceto a nova linha.
"This.is.a.test" -split "\."
This
is
a
test
A instrução a seguir usa a opção SimpleMatch para direcionar o operador -split para interpretar o delimitador de ponto (.) literalmente.
O 0 representa o valor "return all" do parâmetro Max-substrings. Você pode usar opções, como SimpleMatch, somente quando o valor Max-substrings é especificado.
"This.is.a.test" -split ".", 0, "simplematch"
This
is
a
test
A instrução a seguir divide a cadeia de caracteres em um dos dois delimitadores, dependendo do valor de uma variável.
$i = 1
$c = "LastName, FirstName; Address, City, State, Zip"
$c -split $(if ($i -lt 1) {","} else {";"})
LastName, FirstName
Address, City, State, Zip