Nehmen wir an, ich habe den folgenden regulären Ausdruck:
-(\d+)-
und ich möchte mit C # die Gruppe 1 (\d+)
durch ersetzen, um Folgendes AA
zu erhalten:
-AA-
Jetzt ersetze ich es mit:
var text = "example-123-example";
var pattern = @"-(\d+)-";
var replaced = Regex.Replace(text, pattern, "-AA-");
Aber das gefällt mir nicht wirklich, denn wenn ich _(\d+)_
stattdessen das Muster so ändere, dass es übereinstimmt , muss ich auch die Ersatzzeichenfolge um ändern _AA_
, was gegen das DRY-Prinzip verstößt.
Ich suche so etwas wie:
Behalten Sie den übereinstimmenden Text genau bei, aber ändern Sie Gruppe 1 nach this text
und Gruppe 2 nach another text
...
Edit:
Das war nur ein Beispiel. Ich suche nur nach einer generischen Methode, um das zu tun, was ich oben gesagt habe.
Es sollte funktionieren für:
anything(\d+)more_text
und jedes Muster, das Sie sich vorstellen können.
Ich möchte nur Gruppen ersetzen und den Rest des Spiels behalten.
:)
. Meiner Meinung nach ist diese Lösung viel besser und sauberer als die Verwendung von Lookahead und Lookbehinds..Value
zum.Groups[1]
etc. hinzufügen(?:foo)(bar)
,$1
ersetzen wirdbar
. Weitere DetailsSie können dies mit lookahead und lookbehind tun :
quelle
Ich brauchte das auch und habe die folgende Erweiterungsmethode dafür erstellt:
Verwendung:
Ergebnis:
quelle
Wenn Sie Ihr Muster nicht ändern möchten, können Sie die Eigenschaften Gruppenindex und Länge einer übereinstimmenden Gruppe verwenden.
quelle
Hier ist eine weitere schöne saubere Option, bei der Sie Ihr Muster nicht ändern müssen.
quelle
Gehen Sie die folgende Codierung durch, um den separaten Gruppenersatz zu erhalten.
quelle