2014-05-06 13 views
12

Vorrei dividere una stringa che ha caratteri di variabile spazi vuoti, ma ottenere un sacco di righe vuote che vorrei eliminare. questo codiceDividere la stringa con caratteri spazi vuoti variabili in Poweshell

$text = "Video Video Audio Audio VBI VBI" 
$text.Split() 

uscite questa

Video 

Video 

Audio 

Audio 

VBI 



VBI 

PS H:\> 

e vorrei che questo

Video 
Video 
Audio 
Audio 
VBI 
VBI 

risposta

20

È possibile utilizzare -split operatore di PowerShell che utilizza le espressioni regolari.

"Video Video Audio Audio VBI VBI" -split '\s+' 

Come notato da @StijnDeVos, ciò non toglie che porta/spazi finali.

Qui, lo \s rappresenta i caratteri di spaziatura e + corrisponde a uno o più di essi. Un motivo in più per andare con la risposta di @ user3554001.

Un'altra opzione consiste nel filtrare le stringhe vuote.

"Video Video Audio Audio VBI VBI".split()| where {$_} 
+1

'-split '\ s +'' non rimuove spazi vuoti iniziali e finali, quindi è ancora necessario filtrare le stringhe vuote. –

9

è possibile utilizzare questo frammento di eliminare righe vuote:

$text.split(" ",[System.StringSplitOptions]::RemoveEmptyEntries) 
+0

Questo non funziona se c'è una scheda tra le stringhe. – randomuser15995183

2

L'operatore -split prende un argomento regex, quindi basta corrispondere più caratteri di spaziatura (\ s +):

$Text = $text = "Video Video Audio Audio VBI VBI" 
$text -split '\s+' -match '\S' 

Video 
Video 
Audio 
Audio 
VBI 
VBI 

Qualsiasi spazio finale dopo l'ultimo potrebbe lasciare una voce nulla, quindi -match eliminerà tutto ciò che è solo uno spazio bianco.

4

Prova questo, sostituisce più un'istanza di uno spazio con una singola istanza prima di eseguire il comando split:

$($text -replace '\s+', ' ').split() 
6

-split "Video Video Audio Audio VBI VBI"

+2

+1 Preferisco questo alla mia risposta. Ho dimenticato che '-split' potrebbe essere usato come operatore unario. – Rynant

1

altra soluzione:

$text -split ' ' | where {$_.Trim() -ne ''} 

o :

$text.Split(' ').Where({$_.Trim() -ne ''}) 
Problemi correlati