Partilhar via


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

Consulte também