如何从C#
中的以下字符串中提取子字符串“John Woo”CN = John Woo,OU = IT,OU = HO,DC = ABC,DC = com
谢谢!
答案 0 :(得分:4)
您可以使用Lookup<TKey, TElement>
:
string text = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
var keyValues = text.Split(',')
.Select(s => s.Split('='))
.ToLookup(kv => kv[0], kv => kv.Last());
string cn = keyValues["CN"].FirstOrDefault(); // John Woo
// or, if multiple values with the same key are allowed (as suggested in the given string)
string dc = string.Join(",", keyValues["DC"]); // ABC,com
请注意,如果密钥不存在(如字典中),或者密钥不是uniqe(如字典中),则既不会出现异常。该值为IEnumerable<TElement>
。
答案 1 :(得分:2)
试试这个
var regex = new Regex("CN=(?<mygroup>.*?),");
var match = regex.Match("CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com");
if(match.Success)
{
string result = match.Groups["mygroup"].Value;
}
答案 2 :(得分:1)
试试这个(这是一个非通用的答案):
var name = str.Split(',').Where(n => n.StartsWith("CN=")).FirstOrDefault().Substring(3);
答案 3 :(得分:1)
像这样的东西
var s = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
// this give you a enumarable of anonymous key/value
var v = s.Split(',')
.Select(x => x.Split('='))
.Select(x => new
{
key = x[0],
value = x[1],
});
var name = v.First().value; // John Woo
答案 4 :(得分:0)
您可以先用逗号分隔字符串以获取字符串数组,每个字符串都是由=
分隔的名称/值对:
string input = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
var nameValuePairs = input.Split(new[] {','});
然后您可以像这样分割第一个名称/值对:
var nameValuePair = nameValuePairs[0].Split(new[]{'='});
最后,值部分将为nameValuePair[1]
:
var value = nameValuePair[1];
(上面没有显示错误处理 - 您当然必须添加一些。)
答案 5 :(得分:0)
我创建了自己的下面代码,最后得到了我需要的子字符串。下面的代码适用于我想要提取的每个子字符串,它们落在“CN =”之后和第一次出现“,”之前。
string name = "CN=John Woo,OU=IT,OU=HO,DC=ABC,DC=com";
int index1 = name.IndexOf("=") + 1;
int index2 = name.IndexOf(",") - 3;
string managerName = name.Substring(index1, index2);
结果是“John Woo”
感谢所有人的帮助......