我需要通过拆分这样的字符串来创建字典:
[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
由于
答案 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]一些文本 元素
然后很容易。迭代它,使用']'拆分为逃逸。第一个元素是键,第二个元素是值。