如何将字符串拆分为Dictionary <string,string> </string,string>

时间:2009-09-27 12:58:47

标签: c# regex dictionary split

我需要通过拆分这样的字符串来创建字典:

[SenderName]
Some name
[SenderEmail]
Some email address
[ElementTemplate]
Some text for
an element
[BodyHtml]
This will contain
the html body text 
in
multi
lines
[BodyText]
This will be multiline for text
body

如果更容易,密钥可以被任何东西包围,例如[!#键#!] 我有兴趣将[]中的所有内容作为键和“键”之间的任何内容作为值:

key ::  value
SenderName  ::  Some name
SenderEmail  ::  Some email address
ElementTemplate  ::  Some text for
                     an element

由于

3 个答案:

答案 0 :(得分:5)

C#3.0版本 -

public static Dictionary<string, string> SplitToDictionary(string input)
{
    Regex regex = new Regex(@"\[([^\]]+)\]([^\[]+)");

    return regex.Matches(input).Cast<Match>().ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value.Trim());
}

以前版本的Oneliner -

public static Dictionary<string, string> SplitToDictionary(string input)
{
    return new Regex(@"\[([^\]]+)\]([^\[]+)").Matches(input).Cast<Match>().ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value.Trim());
}

标准C#2.0版本 -

public static Dictionary<string, string> SplitToDictionary(string input)
{
    Regex regex = new Regex(@"\[([^\]]+)\]([^\[]+)");

    Dictionary<string, string> result = new Dictionary<string, string>();
    foreach (Match match in regex.Matches(input))
    {
        result.Add(match.Groups[1].Value, match.Groups[2].Value.Trim());
    }

    return result;
}

答案 1 :(得分:1)

您的格式与Windows INI文件格式非常相似。当我搜索“C#ini文件解析器”时,Google给了我this article。你可以从那里采取一些想法。

答案 2 :(得分:0)

您可以删除第一个'['和所有“] \ n”for for']'

然后使用'['作为转义来拆分字符串。这时你将有一个像

这样的数组

键]值 0 - SenderName]一些名字 1 - SenderEmail]一些电子邮件地址 2 - ElementTemplate]一些文本                      元素

然后很容易。迭代它,使用']'拆分为逃逸。第一个元素是键,第二个元素是值。