Wie kann ich einen berechneten Wert in einer RegEx-Ersetzungsoperation in C # verwenden?

7

Ich suche nach einer Möglichkeit, die Länge einer Vergleichsgruppe im ersetzenden Ausdruck mit der Funktion c # regex.replace zu verwenden.

Das heißt, was kann ich ersetzen ??? mit dem folgenden Beispiel, um die unten gezeigte gewünschte Ausgabe zu erhalten?

Beispiel:

%Vor%

Gewünschte Ausgabe

%Vor%

Hinweis: Dies ist ein extrem konstruiertes / vereinfachtes Beispiel zur Veranschaulichung der Frage. Ich erkenne für dieses Beispiel, dass ein regulärer Ausdruck nicht der ideale Weg ist, dies zu tun. Vertrauen Sie mir einfach, dass die Anwendung der Antwort in der realen Welt Teil eines komplexeren Problems ist, das die Verwendung eines RegEx-Ersatzes erfordert.

    
JohnFx 10.08.2009, 19:32
quelle

3 Antworten

8

Versuchen Sie, die Version von Regex.Replace zu verwenden, die eine Funktion aufruft, um zu bestimmen, welcher Ersatztext sein sollte:

%Vor%

Ссылка

Die Funktion könnte dann den übereinstimmenden Text betrachten (das Objekt Match wird als Argument für die Evaluatorfunktion bereitgestellt) und eine Zeichenfolge mit dem richtigen berechneten Wert zurückgeben.

    
Amber 10.08.2009, 19:36
quelle
13

Wenn Sie C # 3 verwenden, können Sie einfach einen MatchEvaluator aus einem Lambda-Ausdruck erstellen:

%Vor%

In C # 2 können Sie einen Delegaten verwenden:

%Vor%     
Guffa 10.08.2009 19:48
quelle
3

Versuchen Sie

%Vor%

mit dem unten stehenden MatchEvaluator-Beispiel

%Vor%

(teilweise aus dem Regular Expressions Cookbook gestohlen - meine Bibel haha)

    
NickAldwin 10.08.2009 19:38
quelle

Tags und Links