2016-07-11 16 views
0

Wie geschweifte Klammern in einer dynamischen Zeichenfolge Variable, die in String.Format verwendet wird?Wie geschweifte Klammer in einer dynamischen String-Variablen, die in String.Format verwendet wird, zu entkommen?

Edit 1

Ich bin mir bewusst, wie kann dies gehandhabt werden, wenn der Wert des Strings bekannt ist. für z.B.

string someStringVar = "This is a random string {0}. Blah {{ Blah {{ Blah }}" 

Aber wie man damit umgeht, wenn ich den Strings-Wert nicht kenne. für z.B.

string someStringVar = GetValueFromXmlFile(); 

In dem obigen Code könnte GetValueFromXmlFile Methode einen String mit einem gültigen Platzhalter zurückkehren wie {0}, sondern auch Zeichen wie {} oder die keine Platzhalter enthalten könnte? In einem solchen Fall sollte man entkommen {oder}, ohne gültigen Platzhalter wie {0} zu umgehen.

+1

Bitte zeigen Sie ein Beispiel von dem, was Sie versuchen zu tun. – Steve

+0

Wenn die Zeichenfolge als Platzhalter für den Format formatiert ist, sollte sie bereits geschweifte Klammern maskiert haben und als Formatzeichenfolge verwendet werden können. Sie sollten das Problem _there_ lösen, anstatt eine Reihe von riskanten, brüchigen Logik hinzuzufügen, um zu versuchen, zu raten, was entgangen sein sollte und was nicht. –

Antwort

0

Sie können alle geschweiften Klammern replizieren und als fix die, die Sie wollen nicht entgangen sein:

var duplicateLeftCurlyBrackets = Regex.Replace(someStringVar, @"([^}]|^)}([^}]|$)", @"$1}}$2"); 
var duplicatedBothCurlyBrackets = Regex.Replace(duplicateLeftCurlyBrackets, @"([^{]|^){([^{]|$)", @"$1{{$2"); 
var result = Regex.Replace(duplicatedBothCurlyBrackets, @"{{([0-9]+)}}", @"{$1}"); 

Kann man wirklich davon ausgehen, dass die Eingabe immer in Form sein wird, wie aus Ihrem Beispiel gesehen?

Verwandte Themen