如何分割此字符串以仅获得名称值
本文关键字:字符串 何分割 分割 | 更新日期: 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;