it-swarm.com.de

So teilen Sie die Zeichenfolge in Powershell nach Zeichenfolge auf

Ich versuche, die Zeichenfolge mit einem Trennzeichen zu spucken. Dies ist eine Zeichenfolge:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = "<<>>"
$string.Split($separator)

Als Ergebnis der Spaltung bekomme ich:

5637144576, messag

est



5637145326, 1



5637145328, 0

Anstatt

5637144576, messag<>est
5637145326, 1
5637145328, 0

Wenn ich versuche, überladenen Split zu verwenden, der die Zeichenfolge [] akzeptiert:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = @("<<>>")
$string.Split($separator)

Aber ich bekomme den nächsten Fehler:

Cannot convert argument "0", with value: "System.Object[]", for "Split" to type "System.Char[]": "Cannot convert value "<<>>" to type "System.Char". Error: "String must be exactly one character long.""

Weiß jemand, wie man eine Zeichenfolge aufteilt?

15
Ievgen

Der -split-Operator verwendet die Zeichenfolge zum Teilen anstelle eines Zeichens wie Split():

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = "<<>>"
$string -split $separator

5637144576, messag<>est
5637145326, 1
5637145328, 0

Wenn Sie die Split()-Methode mit einer Zeichenfolge verwenden möchten, benötigen Sie $seperator, um ein Stringarray mit einem Element zu sein, und geben Sie außerdem einen Wert für stringsplitoptions an. Sie können dies durch Überprüfen der Definition sehen:

$string.Split

OverloadDefinitions                                                                                
-------------------                                                                                
string[] Split(Params char[] separator)                                                            
string[] Split(char[] separator, int count)                                                        
string[] Split(char[] separator, System.StringSplitOptions options)                                
string[] Split(char[] separator, int count, System.StringSplitOptions options)                     

#This one
string[] Split(string[] separator, System.StringSplitOptions options)      
string[] Split(string[] separator, int count, System.StringSplitOptions options)


$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0"
$separator = [string[]]@("<<>>")
$string.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries)

5637144576, messag<>est
5637145326, 1
5637145328, 0

BEARBEITEN: Wie @RomanKuzmin darauf hinweist, wird -split standardmäßig unter Verwendung von Regex-Mustern aufgeteilt. Achten Sie also darauf, Sonderzeichen zu kennzeichnen (z. B. ., der in regulären Ausdrücken "beliebiges Zeichen" ist). Sie können auch simplematch dazu zwingen, das Regex-Matching wie folgt zu deaktivieren:

$separator = "<<>>"
$string -split $separator, 0, "simplematch"

Lesen Sie mehr über -splithier .

21
Frode F.

Anstelle der Split-Methode können Sie den split-Operator verwenden. Ihr Code wird also so sein:

$string -split '<<>>'
1
Piotr Stapp

Manchmal sieht PowerShell genauso aus wie C # und bei anderen, wissen Sie ...

Es könnte auch so verwendet werden:

# A dummy text file
$text = @'
abc=3135066977,8701416400

def=8763026853,6433607660

xyz=3135066977,9878763344
'@ -split [Environment]::NewLine,[StringSplitOptions]"RemoveEmptyEntries"

"`nBefore `n------`n"

$text

"`nAfter `n-----`n"

# Do whatever with this
foreach ($line in $text)
{
    $line.Replace("3135066977","6660985845")
}
1
Vince Ypma

Folgendes sollte das sein, was Sie brauchen:

 $string -Split $separator

Dies erzeugt:

5637144576, messag<>est
5637145326, 1
5637145328, 0
0
David Martin