Verwenden Sie Powershell, um den Unterabschnitt des Regex-Ergebnisses zu ersetzen

8

Mit Powershell weiß ich, wie man eine Datei mit einer Regex nach einer komplizierten Zeichenfolge sucht und diese durch einen festen Wert ersetzt, wie im folgenden Code-Schnipsel:

%Vor%

Nun versuche ich herauszufinden, wie man einen Unterabschnitt jeder Übereinstimmung einer Regex ersetzt. Kann dies in einem Schritt wie oben gemacht werden? Oder musst du jedes Match des größeren Regex extrahieren, darin suchen und ersetzen und dieses Ergebnis dann irgendwie wieder in den Originaltext stecken?

Um mit einem Beispiel zu verdeutlichen, nehme ich an, dass ich im folgenden Testtext nur die 14xx-nummerierten Instanzen wie "TEST = * 1404" im folgenden Text suchen und 14xx durch 16xx ersetzen soll?

%Vor%

i.e. Ich möchte, dass der resultierende Text wie folgt ist, wo Sie bemerken, dass nur die ersten 6 Zeilen geändert werden sollten:

%Vor%

Die folgende Regex scheint die Aufgabe zu erfüllen, die größeren Strings zu finden, an denen ich Ersetzungen vornehmen muss, aber ich weiß nicht, welche Funktionalität in Powershell ( replace ?) zum Ersetzen der Teilzeichenfolge der Ergebnisse verwendet werden soll. Auch, zögern Sie nicht, eine bessere Regex vorschlagen, wenn das helfen würde.

%Vor%

Ich möchte lieber keine erschöpfende Liste der Dinge schreiben, die zwischen dem '=' und den Zahlen stehen können, wie 'R', 'C', 'CSA' usw.

Ich habe ungefähr eine Stunde an etwas gearbeitet, wo ich alle Übereinstimmungen für die Regex erhalte, suche in ihnen, um 14 durch 16 zu ersetzen, führe dann replace auf dem ursprünglichen Text mit den alten und neuen Werten aus, z. replace($myText,"TEST=CSA1400","TEST=CSA1600") , aber das deckt die Sonderfälle nicht sehr gut ab, und es fühlt sich an, als würde ich das Kaninchenloch hinuntergehen.

    
SSilk 11.11.2013, 22:19
quelle

3 Antworten

16

Sie müssen die Unterausdrücke gruppieren, die Sie beibehalten möchten (z. B. zwischen Klammern) und dann über die Variablen und in der Ersetzungszeichenfolge auf die Gruppen verweisen. Versuchen Sie etwas wie folgt:

%Vor%     
Ansgar Wiechers 11.11.2013, 22:30
quelle
1

Versuchen Sie Folgendes:

%Vor%     
Keith Hill 11.11.2013 22:37
quelle
0

Hier ist ein Beispiel mit einem Scriptblock-Delegaten (manchmal als Evaluator bezeichnet):

%Vor%

Es ist wohl komplexer als der -replace-Operator, aber Sie können Powershell-Operatoren verwenden, um den Ersetzungstext zu erstellen, damit Sie alles tun können, was Sie in einen Skriptblock einfügen können.

    
mjolinor 12.11.2013 04:28
quelle

Tags und Links