[PowerShell] Frage zu Teilstring

eightcore

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
1.656
Guten Abend.

Ich habe einen String, z.B. "jdieofjioejsiod,this". Nun will ich nur "this". Also immer den Teil nach dem letzten Komma bis zum Schluss. Wie mache ich das? Ich weiss nicht, wonach ich googlen soll. Da sowohl der erste Teil als auch der letzte Teil in der Länge variabel sind, gehts mit Substring und LastIndexOf nicht.


MfG | eightcore
 
Method: 1 ( 'split' )

Code:
	$String = "jdieofjioejsiod,this"

	$Split = $String.split( "," )

	$Last = $Split[ $Split.length - 1 ]

	Write-Output( $Last )


Method: 2 ( Ressourcenschonender )

Code:
	$String = "jdieofjioejsiod,this"

	$LastIndex = $String.lastIndexOf( "," )

	$SubString = $String.substring( $LastIndex  + 1)

	Write-Output( $SubString )


Gruß
 
Zuletzt bearbeitet:
Eine weitere Möglichkeit ist die Nutzung eines regulären Ausdrucks:

Code:
$myString = "jdieofjioejsiod,this"
$mySubString = ([regex]'(.*),(.*)').match($myString).groups[2].value

Write-Output $mySubString

Das ganze liest sich dann so "(.*),(.*)":

(.*): Irgendein Zeichen (der Punkt) und zwar beliebig oft / oder auch gar nichts (der Stern (Quantifizierer))
, : gefolgt von einem Komma
(.*): gefolgt von wiederum irgendeinem Zeichen -beliebig oft / oder auch gar nichts

Die Klammern um die jeweiligen Punkte samt Quantifizierern (den Sternen) bilden sogenannte Gruppen.
Somit wird der String in 2 Gruppen eingeteilt, die durch ein Komma getrennt werden.

Über die Eigenschaft "Groups[2].value" teile ich mit, dass ich den Wert (Value) der 2. Gruppe erhalten möchte.

Ich hoffe, ich konnte das ein wenig verständlich erläutern ;)
 
Zuletzt bearbeitet:
Code:
$myString = "jdieofjioejsiod,this1.this2,|kabooooom.,this3"

$mySubString = ([regex]'(.*),(.*)').match($myString).groups[2].value
 
Write-Output $mySubString = "this3"
 
@EightCore
Ja, das ist richtig.

Und hätte ich deinen Text besser gelesen, wäre mir das Detail "...nach dem letzten Komma" auch aufgefallen.
Schade - somit ist meine Lösung erstmal unbrauchbar für dein Vorhaben ;)

Da passt BadMadMax' Lösung ideal.

Vielleicht passe ich meine noch einmal an - dann aber erst morgen. Muss jetzt ab in die Heia ;)
 
Zuletzt bearbeitet:
@SonyXP: Also beim testen funktioniert deine Lösung auch mit mehr "," wunderbar.

aber wenn du @eightcore auf Nummer sicher gehen möchtest und dabei auf die "RegEx" Variante setzen möchtest sollte ein "$" die Lösung sein.

Der Matche-Am-Ende-Der-Zeile Operator $
Der Ankeroperator, der das Pattern des regulären Ausdrucks am Ende des Strings bzw. der Zeile verankert.

Code:
([regex]'(.*),(.*$)').match($myString).groups[2].value

beachte die zweite Gruppe "(.*$)" ich bin mir nur nicht sicher ob das "$" da an der richtigen stelle steht ;)
 
Zurück
Oben