2

我有一个形式为:

"company=ABCorp, location=New York, revenue=10million, type=informationTechnology"

我希望能够解析出这个字符串并以以下形式获取“名称”、“值”对

公司 = ABCCorp

位置=纽约等

这可以是任何合适的数据结构来存储。我在想也许是一个Dictionary<string, string>(),但我愿意接受建议。

在 C# 中是否有合适的方法来执行此操作?

编辑:我的最终目标是拥有这样的东西:

数组[公司] = ABCCorp。数组[位置] = 纽约。

我们可以使用什么数据结构来实现上述目标?我的第一个想法是字典,但我不确定我是否遗漏了什么。

谢谢

4

4 回答 4

4

使用String.SplitToDictionary,您可以:

var original = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";

var split = original.Split(',').Select(s => s.Trim().Split('='));

Dictionary<string,string> results = split.ToDictionary(s => s[0], s => s[1]);
于 2012-08-14T18:12:36.083 回答
3
string s = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";
var pairs = s.Split(',')
        .Select(x => x.Split('='))
        .ToDictionary(x => x[0], x => x[1]);

对是带有键值对的字典。唯一需要注意的是,您可能需要处理逗号和字符串之间的任何空格。

于 2012-08-14T18:11:01.420 回答
2

这在很大程度上取决于预期的语法。一种方法是使用 String.Split: http: //msdn.microsoft.com/en-us/library/system.string.split (v=vs.110).aspx

首先按逗号拆分,然后遍历返回的字符串列表中的所有项目,然后按相等拆分这些项目。

但是,这要求值中永远不存在逗号和相等?

于 2012-08-14T18:07:52.520 回答
1

我假设 RegEx/LINQ 背景较弱,所以这是一种没有任何“特殊”的方法。

string text = "company=ABCorp, location=New York, revenue=10million, type=informationTechnology";

string[] pairs = text.Split(',');
Dictionary<string, string> dictData = new Dictionary<string, string>();

foreach (string currPair in pairs)
{
    string[] data = currPair.Trim().Split('=');

    dictData.Add(data[0], data[1]);
}

这要求逗号 ( ,) 和等号 ( =) 除了作为分隔符之外永远不会存在于数据中。

这在很大程度上依赖于String.Split

于 2012-08-14T18:09:53.353 回答