Ersetzen mit dem Namen Gruppe in regex mit Wert
Möchte ich regulären Ausdruck verwenden gleiche Weise als string.Format. Ich werde erklären,
Habe ich:
string pattern = "^(?<PREFIX>abc_)(?<ID>[0-9])+(?<POSTFIX>_def)$";
string input = "abc_123_def";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
string replacement = "456";
Console.WriteLine(regex.Replace(input, string.Format("${{PREFIX}}{0}${{POSTFIX}}", replacement)));
Dies funktioniert, aber ich muss Sie "input" auf regex.Ersetzen. Ich will nicht, dass. Ich will Muster für, sondern auch für die Erstellung von strings gleicher Weise wie beim string-format, ersetzen benannte Gruppe "ID" mit dem Wert. Ist das möglich?
Ich bin auf der Suche nach etwas wie:
string pattern = "^(?<PREFIX>abc_)(?<ID>[0-9])+(?<POSTFIX>_def)$";
string result = ReplaceWithFormat(pattern, "ID", 999);
Ergebnis enthalten "abc_999_def". Wie dies zu erreichen?
Dies ist nicht genau das, was du suchst, aber kann von Wert sein. Es ist im Grunde eine benannte Zeichenfolge.format, statt indiziert. haacked.com/archive/2009/01/04/...
InformationsquelleAutor Tomas Voracek | 2010-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, es ist nicht möglich, einen regulären Ausdruck zu verwenden, ohne input. Es hat zu etwas, mit zu arbeiten, kann das Muster nicht fügen Sie alle Daten zu den Ergebnis, alles von der Eingabe-oder den Ersatz.
Intead der mit String.Format, können Sie einen Blick hinter sich und ein Blick in die Zukunft zu geben Sie den Teil zwischen "abc_" und "_def", und ersetzen Sie es:
Siehe auch Antwort und Kommentar von user1817787
Die beste Antwort ist nicht zu diesem post, aber diese eins.
InformationsquelleAutor Guffa
Ja, es ist möglich:
Verwendung:
Ergebnis ist: abc_456_def
Don ' T get your jimmies so raschelte.
Nein, es ist nicht möglich, einen regulären Ausdruck zu verwenden, ohne input. Sie bieten einen input in den code in deine Antwort, damit es nicht zeigen, was Sie behaupten.
Sie haben, um zu verstehen, was er will, statt bashing ihn auf seinen Fehler. Blick auf den Titel: "Ersetzen mit dem Namen Gruppe in regex mit Wert", schauen Sie auf Ihre Antwort, wo ist die benannte Gruppe? Schau dir sein Beispiel: "ReplaceWithFormat(pattern, "ID", 999);". Er will genau so ersetzen Sie die aktuelle "ID" mit 999. Blick auf seine erwartete Ergebnis: "abc_999_def". Er will ersetzen Sie die Gruppe namens "ID" in "abc_123_def" mit 999 und erhalten "abc_999_def". Sagen, dass es nicht möglich ist, hilft dabei überhaupt nicht. Auch dein Beispiel-code, der nicht tut, was er will.
InformationsquelleAutor user1817787
Es wurde ein problem in user1817787 Antwort und ich musste, um eine änderung des
ReplaceNamedGroup
- Funktion wie folgt.Er bearbeitet seine Antwort zu gehören mir. Siehe stackoverflow.com/posts/13342795/revisions
InformationsquelleAutor Justin
Anderen bearbeitete version der ursprünglichen Methode von @user1817787, dieses unterstützt mehrere Instanzen des namens-Gruppe (umfasst auch ähnlich fix auf die eine @Justin gepostet (Ergebnis-mit {match.Index, match.Länge} statt {0, input.Länge})):
Ich nahm Ersetzung einzelner Zeichen durch ein einzelnes Zeichen, wie im Beispiel aus Frage 123 ==> 999. E. g. für die Maskierung sensibler Daten.
InformationsquelleAutor Danny Varod
Ich verkürzt ReplaceNamedGroup, noch die Unterstützung für mehrere Aufnahmen.
InformationsquelleAutor GreatBittern
Die einfache Lösung ist zu verweisen auf die übereinstimmenden Gruppen ersetzt. Also das Präfix ist
$1
- und Postfix ist$3
.Habe ich noch nicht getestet, der code unten sollte aber funktionieren ähnlich wie ein
regEx
ich habe vor kurzem geschrieben:InformationsquelleAutor Alex Basile
Sollten Sie überprüfen der Dokumentation zu RegEx ersetzen hier
Habe ich diese zu ersetzen, die einer benannten Gruppe. Ich kann nicht verwenden, die Lösung, die Schleife über alle Gruppen name, weil ich den Fall, wo nicht alle Ausdruck gruppiert.
InformationsquelleAutor Bastien Vandamme