将具有特定模式的字符串分隔为字典

时间:2011-02-15 12:22:59

标签: c# string design-patterns

用户输入:

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

您如何阅读这样的字符串并将其分成如下字典:

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

4 个答案:

答案 0 :(得分:2)

组合正则表达式和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 :(得分:1)

使用正则表达式:

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);
}

答案 2 :(得分:0)

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);

答案 3 :(得分:0)

我可能会使用正则表达式来解析输入字符串。 然后,我将创建一个包含所有值的类,并覆盖.ToString()方法以输出回其原始字符串值。

此外,您应该显示输入字符串的至少一个“Example”值。否则,解释您的问题并提供基于代码的可靠答案有点困难。