在C#中将字符串拆分为字符串数组列表

3
我正在尝试将以下字符串转换为(一个字符串数组列表):
"CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain"
请注意格式要求并保留HTML标记。
[
  {"CN" , "Test"},
  {"OU" , "ABC"},
  {"OU" , "Company"},
  {"DC" , "CFLA"},
  {"DC" , "domain"},
]

我已经尝试将字符串转换为字典列表。 我尝试了两次拆分字符串。 首先基于拆分,然后再基于=拆分。
下面是我使用的代码:
var result = str.Split(',')
                .Select(line => line.Split('='))
                .ToDictionary(b=> b[0], b=> b[1])
                .ToList();

但是它给我以下异常:'System.ArgumentException: '已经添加了具有相同键的项',这很正确,因为“OU”和“DC”被重复用作键。

现在我想将此字符串拆分/转换/处理为字符串数组列表(如上所示)。这可行吗?

或者请指导我一个替代方案。先感谢您。

P.S. 我有成百上千个这样的字符串,我只想要每个字符串中第一个“OU”的值。


2
只需删除您的 ToDictionary 调用,您就已经拥有了一个字符串数组列表。虽然如果目标只是“从每个字符串中获取第一个 OU”,那么还有更简单的方法。 - Jon Skeet
3个回答

7

如果你真的想要一个字符串数组列表,只需省略"ToDictionary"行。

var result = str.Split(',')
            .Select(line => line.Split('='))
            .ToList();

此代码将返回一个数组列表,其中每个数组[0]包含“键”,[1]包含“值”。

附加提示:要获取第一个“OU”值,您可以使用正则表达式:

var firstOuRegex = new Regex("[oO][uU]=([^,]+)", RegexOptions.Compiled);
var testString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";

var result = firstOuRegex.Match(testString).Groups[1];

如果你要使用它的话,最好只是使用正则表达式来完成整个解决方案。 - ShaneDemskie

2
你的表达式中有两个“OU”条目,因此无法将其翻译为字典。 相反,将其翻译为一个键值对列表。
var result = str.Split(',')
            .Select(line => line.Split('='))
            .Select(tuple => new KeyValuePair<string, string>(tuple[0], tuple[1]))
            .ToList();

1
我想下面的代码将为您提供所需的结果:
class Program
{
    static void Main(string[] args)
    {
        string initialString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";

        List<string[]> finalList = new List<string[]>();
        string [] firstSplitStringsArray = initialString.Split(',');
        foreach (var item in firstSplitStringsArray)
        {
            string [] secondlySplittedStringsArray = item.Split('=');
            finalList.Add(secondlySplittedStringsArray);
        }
    }
}

如果您只需要第一个OU值,代码可以是:
        string initialString = "CN=Test,OU=ABC,OU=Company,DC=CFLA,DC=domain";
        string requiredValue = string.Empty;

        string [] firstSplitStringsArray = initialString.Split(',');
        foreach (var item in firstSplitStringsArray)
        {
            string [] secondlySplittedStringsArray = item.Split('=');
            if (secondlySplittedStringsArray[0] == "OU")
            {
                requiredValue = secondlySplittedStringsArray[1];
                break;
            }
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接