2 Stimmen

Tokenwerte in einem String finden c#

Ich habe die folgende Situation. Ich habe ein Muster wie dieses:

Hallo, mein Name ist ${name}, ich bin ${age} Jahre alt. Ich lebe in ${address}

Ich möchte den Wert dieser Platzhalter in einem Satz erhalten:

Hallo, mein Name ist Peter, ich bin 22 Jahre alt. Ich lebe in San Francisco, Kalifornien

Also benötige ich den key=value in einem Dictionary:

${name} = "Peter",
${age} = "22",
${address} = "San Francisco, Kalifornien"

4voto

kobigurk Punkte 731

Hast du schon versucht, Regex zu verwenden? Dies ist ein klassischer regulärer Ausdruck. Einer, der zu deinem Satz passt :

Hallo, mein Name ist (?.*), ich bin (?.*) Jahre alt\. Ich lebe in (?

Verwendungsbeispiel :

Match match = Regex.Match(@"Hi, my name is Peter, I am 22 years old. I live in San Fransisco, California", @"Hi, my name is (?.*), I am (?.*) years old\. I live in (?

Jetzt, um auf die spezifischen Gruppen zuzugreifen :

match.Groups["name"], match.Groups["age"], match.Groups["address"]

Diese werden dir deine Werte geben. Natürlich solltest du zuerst überprüfen match.IsSuccess, um zu sehen, ob der Regex übereinstimmt.

2voto

Ahmed KRAIEM Punkte 9867

Konvertiere dein Muster in einen Regex mit benannten Erfassungsgruppen:

    string pattern = "Hi, my name is ${name}, I am ${age} years old. I live in ${address}";
    string input = "Hi, my name is Peter, I am 22 years old. I live in San Francisco, California";
    string resultRegex = Regex.Replace(Regex.Escape(pattern), @"\\\$\\\{(.+?)}", "(?<$1>.+)");
    Regex regex = new Regex(resultRegex);
    GroupCollection groups = regex.Match(input).Groups;

    Dictionary dic = regex.GetGroupNames()
                                          .Skip(1)
                                          .ToDictionary(k => "${"+k+"}",
                                                        k => groups[k].Value);
    foreach (string groupName in dic.Keys)
    {
        Console.WriteLine(groupName + " = " + dic[groupName]);
    }

1voto

Priyank Punkte 1333
string Vorlage = "Hallo, mein Name ist ${name}, ich bin ${age} Jahre alt. Ich lebe in ${address}";
            Dictionary KeyValuePair=new Dictionary();
            KeyValuePair.Add("${name}", "Peter");
            KeyValuePair.Add("${age}", "22");
            KeyValuePair.Add("${address}", "San Francisco, Kalifornien");
            foreach (var key in KeyValuePair.Keys)
            {
                Vorlage = Vorlage.Replace(key, KeyValuePair[key]);
            }

1voto

Sanjeev Rai Punkte 6437

Ein einfacher Weg, dies zu tun, ist die Verwendung der Methode String.Format. Zum Beispiel:

string pattern="Hi, mein Name ist {0}, ich bin {1} Jahre alt. Ich lebe in {2}";
string result= String.Format(patter,name,age,address);//hier Name, Alter, Adresse sind Werte, die im Muster platziert werden sollen.

Weitere Informationen zu String.Format finden Sie unter:

http://msdn.microsoft.com/en-us/library/system.string.format.aspx

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X