Tags: PowerShell
Das Extrahieren eines Teil-Strings gehört zu den häufigsten Aufgaben bei der programmatischen Bearbeitung von Zeichenketten. PowerShell stellt dafür mehrere Techniken zur Verfügung. Dazu zählt vor allem die Substring()-Methode von String-Objekten, die sich mit mehreren Suchoptionen kombinieren lässt, um die Position des Substrings zu bestimmen.
Typische Anwendungen von Substrings sind die Validierung von Benutzereingaben, die Analyse von Logfiles oder der Ausgabe von Scripts bzw. Programmen. Theoretisch könnte man in all diesen Fällen einfach zu regulären Ausdrücken greifen. Aber wenn es um das Vorkommen eines konstanten Substrings an einer bestimmten Position geht, sind regex in der Regel langsamer.
Substring()-Methode mit einem Parameter
Die gängigste Methode, um einen Teil-String in einer Zeichenkette zu identifizieren, ist substring(). Sie lässt sich mit einem oder zwei Parametern aufrufen, und zwar bei Konstanten und Variablen:
"Zeichenketten verarbeiten mit PowerShell".Substring(5)
$z = "Zeichenketten verarbeiten mit PowerShell"
$z.Substring(5)
In beiden Beispielen liefert PowerShell die Zeichenkette, beginnend bei der 5. Stelle bis ans Ende des Strings, also "enketten verarbeiten mit PowerShell". Erinnert sei hier daran, dass die Zählung immer bei 0 beginnt.
Aufruf mit zwei Argumenten
Übergibt man dem Aufruf zwei Argumente, dann liefert die Methode die Anzahl der Zeichen zurück, die im zweiten Argument spezifiziert wurden, und zwar beginnend an der Stelle, die der erste Wert definiert:
"Zeichenketten verarbeiten mit PowerShell".Substring( 2, 5 )
In diesem Beispiel erhält man "ichen" als Ergebnis.
Substring vom Ende des Strings berechnen
Möchte man die Position des Substrings vom Ende der Zeichenkette her berechnen, dann unterstützt PowerShell anders als etwa substr() in PHP keine negativen Zahlen. Vielmehr muss man hier die Länge des Strings zu Hilfe nehmen:
$z = "Zeichenketten verarbeiten mit PowerShell"
$z.Substring( $z.length - 15, 5 )
In diesem Beispiel beginnt der Substring beim 15. Zeichen von hinten und hat eine Länge von 5. Das Ergebnis ist dann " mit ".
Substring mit variabler Startposition
Will man einen Teil der Zeichenkette nicht ab einer festen Position, sondern ab dem Vorkommen eines bestimmten Zeichens extrahieren, dann kombiniert man Substring mit IndexOf() bzw. LastIndexOf().
Die erste der beiden Methoden gibt die Position des ersten Auftretens eines Zeichens oder einer Zeichenkette zurück, die zweite des letzten Vorkommens:
$z = "Zeichenketten verarbeiten mit PowerShell"
$z.Substring( $z.IndexOf( "ver" ), 12 )
Als Ergebnis erhält man in diesem Beispiel "verarbeiten ", weil ab dem Auftreten von "ver" 12 Zeichen gezählt werden.
Wie man dabei sieht, ist der String, dessen Position mit Indexof() oder LastIndexOf ermittelt wird, in der Ausgabe von Substring enthalten.
Substring aus Zeichenkette entfernen
Mit der substring()-Methode erhält man immer nur den Teil-String an der angegebenen Position, der Rest wird verworfen. Manchmal möchte man aber das umgekehrte Resultat, nämlich dass der Substring entfernt und der ihn umgebende Rest beibehalten wird.
Die dafür vorgesehene komplementäre Methode zu Substring() ist Remove(). Wie diese lässt sich Remove() mit einem oder zwei Argumenten aufrufen, für eine variable Startposition verwendet man ebenfalls eine IndexOf()-Methode:
$z = "Zeichenketten verarbeiten mit PowerShell"
$z.Remove( $z.IndexOf( "ver" ), 12 )
Dieses Beispiel entfernt "verarbeiten " und als Ergebnis bleibt "Zeichenketten mit PowerShell".
Zusammenfassung
String-Objekte in PowerShell verfügen über eine substring()-Methode, die man wahlweise mit einem oder zwei Argumenten aufrufen kann. Im ersten Fall erhält man den gesamten String ab der angegebenen Position. Bei der zweiten Variante gibt die Methode den Substring ab der spezifizierten Position in der angegebenen Länge zurück.
Zu bedenken ist immer, dass die Zählung der Position bei null beginnt. Negative Zahlen sind nicht zulässig.
Das komplementäre Ergebnis liefert remove(), das den spezifizierten Substring entfernt und den umgebenden Rest zurückliefert.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Hyper-V Switch mit PowerShell erstellen, verwalten und löschen
- PowerShellGet-Modul aktualisieren, auf PSResourceGet umsteigen
- Adressbücher in Exchange Online anlegen und pflegen
- BitLocker aktivieren mit manage-bde, PowerShell oder WMI
- WhatIf, Confirm und Force: Ausführung von PowerShell-Cmdlets steuern
Weitere Links