如何拆分此字符串以获取名称值

时间:2014-05-06 15:07:43

标签: c# string split

您好我正在寻找一种简单的方法来只知道CN值

之后的名字
CN=Andrew Adams,OU=Services,OU=Users,OU=GIE,OU=CSP,OU=STAFF,DC=example,DC=net

有一种简单的方法吗?我目前正在这样做:

ResultPropertyValueCollection manager = result.Properties["manager"];
string managerUserName = manager[0].ToString();

string[] managerNameParts = managerUserName.Split(',');

string managerName = managerNameParts[0].Substring(4);

Console.WriteLine("Manager Name:" + managerName);

但感觉有点不好。

4 个答案:

答案 0 :(得分:2)

你可以这样做:

var name = "CN=Andrew Adams,OU=Services,OU=Users,OU=GIE,OU=CSP,OU=STAFF,DC=example,DC=net"
.Split(',')[0].Split('=')[1];

Demo

它的作用是在,上拆分并获取第一个元素,然后将其分割为=并获取第二个元素。

如果您的格式不同,可以使用正则表达式:

Regex.Match(name,@"(?<=CN=)[^,]+").Value;

答案 1 :(得分:2)

这是使用正则表达式的好地方。试试这个:

var text = "CN=Andrew Adams,OU=Services,OU=Users,OU=GIE,OU=CSP,OU=STAFF,DC=example,DC=net";
var match = Regex.Match(text, @"CN=([^,]+)");
if (match.Success) return match.Groups[0].Value;

表达式CN=([^,]+)将查找文本CN=,后跟一个或多个非逗号,并将其中的部分标记为Groups[0]

答案 2 :(得分:1)

另一种选择,使用LINQ。

如果名称/值对存在于字符串中的任何位置,您就可以得到它;如果没有,managerName将为null

var managerName = input.Split(',')
                       .Where(x => x.StartsWith("CN="))
                       .Select(x => x.Split('=')[1])
                       .SingleOrDefault();

答案 3 :(得分:0)

我觉得这样做很容易理解:

var input = @"CN=Andrew Adams,OU=Services,OU=Users,OU=GIE,OU=CSP,OU=STAFF,DC=example,DC=net";

var items = input.Split(',');

var keyValues = items.Select(x =>
                {
                    var split = x.Split('=');
                    return new { Key = split[0], Value = split[1] };
                });

var managerName = keyValues.Single(x => x.Key == "CN").Value;