如何分割此字符串以仅获得名称值

本文关键字:字符串 何分割 分割 | 更新日期: 2023-09-27 18:01:52

你好,我正在寻找一种简单的方法来设置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);

但是感觉有点糟糕

如何分割此字符串以仅获得名称值

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

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]中。

你可以这样做:

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

它所做的是分割,并获取第一个元素,然后将其分割=并获取第二个元素。

如果不能使用相同的格式,可以使用regex:

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

另一个选项,使用LINQ。

如果名称/值对存在于字符串的任何位置,你将得到它;如果不是,managerName将是null

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

我发现这样做很容易阅读:

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;