Знайсці сімвалічныя значэнні ў радок ў C #

У мяне наступная сітуацыя. У мяне ёсць узор, як гэта:

<�Р> Прывітанне, мяне завуць $ {імя}, Я $ {ўзрост} гадоў. Я жыву ў $ {адрас}

Я хачу, каб атрымаць значэнне гэтых лексем ў рамках любога прапановы:

<�Р> Прывітанне, мяне завуць Пётр, мне 22 гадоў. Я жыву ў Сан-Францыска, Каліфорнія

So, I need the key=value in a Dictionary:

${name} = "Peter",
${age} = "22",
${address} = "San Francisco, California"
2
Дзе радок атрымаць значэння з ў першую чаргу? Textboxes?
дададзена аўтар user2244255, крыніца

6 адказы

Вы спрабавалі выкарыстоўваць Regex? Гэта класічны Regular Expression. Той, які адпавядае вашаму прапанове:

Hi, my name is (?.*), I am (?.*) years old\. I live in (?
.*)

Прыклад выкарыстання:

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 (?
.*)");

Зараз, каб атрымаць доступ да пэўных групах:

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

Гэта дасць вам вашыя каштоўнасці. Вядома, вы павінны спачатку праверыць match.IsSuccess , каб убачыць, калі Regex быў падабраны.

4
дададзена

Пераўтварэнне хуткамоўкі ў рэгулярны выраз з найменных групамі захопу:

    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]);
    }
2
дададзена

Пераўтварэнне хуткамоўкі ў рэгулярны выраз з найменных групамі захопу:

    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]);
    }
2
дададзена

Адзін просты спосаб зрабіць гэта з дапамогай String.Format <�код /> метад. Напрыклад:

string pattern="Hi, my name is {0}, I am {1} years old. I live in {2}";
string result= String.Format(patter,name,age,address);//here name , age, address are value to be placed in the pattern.

Для атрымання дадатковай даведкі аб String.Formate , см:

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

1
дададзена

Адзін просты спосаб зрабіць гэта з дапамогай String.Format <�код /> метад. Напрыклад:

string pattern="Hi, my name is {0}, I am {1} years old. I live in {2}";
string result= String.Format(patter,name,age,address);//here name , age, address are value to be placed in the pattern.

Для атрымання дадатковай даведкі аб String.Formate , см:

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

1
дададзена
string Template = "Hi, my name is ${name}, I am ${age} years old. I live in ${address}";
            Dictionary KeyValuePair=new Dictionary();
            KeyValuePair.Add("${name}", "Peter");
            KeyValuePair.Add("${age}", "22");
            KeyValuePair.Add("${address}", "San Francisco, California");
            foreach (var key in KeyValuePair.Keys)
            {
                Template = Template.Replace(key, KeyValuePair[key]);
            }
1
дададзена