Разделите строку с определенным шаблоном в словарь - PullRequest
1 голос
/ 15 февраля 2011

Пользователь вводит это:

{YYYY}./.{mm}-{CNo}\/{WEPNo}#{XNo+YNo}

Как бы вы прочитали и разделили такую ​​строку в словарь, подобный этому:

new Dictionary<String, String>() {
  {"YYYY", "./." },
  {"mm", "-"},
  {"CNo", @"\/"},
  {"WEPNo", "#"},
  {"XNo+YNo", ""}
};

Ответы [ 4 ]

2 голосов
/ 15 февраля 2011

Комбинируя регулярные выражения и LINQ, вы можете сделать это так:

var input = @"{YYYY}./.{mm}-{CNo}\/{WEPNo}#{XNo+YNo}";
Regex ex = new Regex(@"\{(?<key>.+?)\}(?<value>[^{}]*)");
var dictionary = ex.Matches(input).Cast<Match>()
  .ToDictionary(m => m.Groups["key"].Value, m => m.Groups["value"].Value);
1 голос
/ 15 февраля 2011

с помощью регулярных выражений:

var input = @"{YYYY}./.{mm}-{CNo}\/{WEPNo}#{XNo+YNo}";

Dictionary<string, string> dictonary = new Dictionary<string, string>();
Regex ex = new Regex(@"\{(?<key>.+?)\}(?<value>[^{]*)");

foreach (Match match in ex.Matches(input))
{
    dictonary.Add(match.Groups["key"].Value, match.Groups["value"].Value);
}
0 голосов
/ 15 февраля 2011

Я бы, вероятно, использовал регулярные выражения для разбора входной строки.Затем я создал бы класс, который имел бы все значения, и переопределил метод .ToString(), чтобы вывести его обратно к исходному строковому значению.

Кроме того, вы, вероятно, должны показать хотя бы одно значение «Пример»:входная строка.В противном случае вам будет сложно интерпретировать ваш вопрос и дать надежный ответ на основе кода.

0 голосов
/ 15 февраля 2011
String str = @"{YYYY}./.{mm}-{CNo}\/{WEPNo}#{XNo+YNo}";

var dict = str.Split(new String[] { "{" }, StringSplitOptions.RemoveEmptyEntries)
    .Select(s => String.Concat("{", s))
    .Select(s => new
    {
        key = String.Concat(s.Split(new String[] { "}" }, StringSplitOptions.None)[0], "}"),
        value = s.Split(new String[] { "}" }, StringSplitOptions.None)[1],
    })
    .ToDictionary(s => s.key, s => s.value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...