您好我正在寻找一种简单的方法来只知道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);
但感觉有点不好。
答案 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];
它的作用是在,
上拆分并获取第一个元素,然后将其分割为=
并获取第二个元素。
如果您的格式不同,可以使用正则表达式:
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;