Zeichenfolge mit Formatvorlage analysieren?
Wenn ich formatieren einer Zeichenfolge mit
string.Format("my {0} template {1} here", 1, 2)
kann ich den Prozess umkehren - ich Stelle die Vorlage und ein ausgefülltes string .net gibt arg0, arg1, etc.?
Kommentar zu dem Problem
Das klingt eigentlich wie ein Fall für eine regex, denke ich ...
Ich bin gespannt, ob ich vermeiden kann regex. Es scheint, dass zwei Objekte teilen eine Vorlage aus, und verwenden Sie einfach besiedeln und de-Auffüllen einer Zeichenkette. Wäre ziemlich elegant.
InformationsquelleAutor der Frage SFun28 | 2011-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt keinen eleganten Weg, um reverse-formatierten string. Aber Sie können versuchen, diese, wenn Sie möchten, eine einfache Funktion.
InformationsquelleAutor der Antwort Mike Park
String.Format ist nicht umkehrbar im Allgemeinen Fall.
Wenn Sie aus genau einem {0} es ist actaully möglichst generischen code schreiben, der mindestens extrahieren string-Repräsentation des Wertes. Sie können definitiv nicht umkehren kann, es zu produzieren ursprünglichen Objekte.
Proben:
Mehrere Argumente:
string.Format("my{0}{1}", "aa", "aaa");
produziert "myaaaaa", tring reversestring.ReverseFormat("my{0}{1}", "myaaaaa")
haben, zu entscheiden, wie split "aaaaa" - Teil in 2 ohne jegliche information.Unfähigkeit umzukehren, um Daten Typ
string.Format("{0:yyyy}", DateTime.Now);
Ergebnisse im Jahr 2011, die meisten Informationen über sich selbst verloren.InformationsquelleAutor der Antwort Alexei Levenkov
Verwenden regulärer Ausdrücke zu analysieren-Gruppe entspricht.
Habe ich nicht VS öffnen, so kann ich nicht überprüfen, wenn ich den Namen der Methode Recht, aber du weißt, was ich meine. Durch die Verwendung paranthesis, die zurückgegeben Ergebnis wird über Gruppen verfügen[0] und Gruppen[1] mit extrahierten entspricht.
InformationsquelleAutor der Antwort Laith
Einen Weg, dies zu tun wäre, reguläre Ausdrücke. Für Ihr Beispiel, das Sie tun konnte:
Es wäre nicht schwer zu schreiben, eine Erweiterung Methode, genau das zu tun, was Sie wollen, basierend auf dieser Technik.
Nur zum Spaß, hier ist meine erste naive Versuch. Ich habe noch nicht getestet, aber es sollte in der Nähe sein.
Dies können Sie tun,
Die Methode ist SEHR naiv und hat viele Probleme, aber es wird im Grunde finden alle Platzhalter im format-Ausdruck, und finden Sie den entsprechenden text in der Quell-Zeichenfolge. Es wird Ihnen die entsprechenden Werte für die Platzhalter aufgelistet, von Links nach rechts, ohne Bezug auf ordinal-oder ein format, das in den angegebenen Platzhalter. Diese Funktionalität kann Hinzugefügt werden.
Ein weiteres problem ist, dass eine spezielle regex-Zeichen in der Formatzeichenfolge wird verursachen, dass die Methode zum Umfallen. Einige weitere Verarbeitung
formatRegex
würde getan werden müssen, zu entkommen, keine Sonderzeichen zu verwenden, die Teil derformatString
.InformationsquelleAutor der Antwort Andrew Cooper