2

如何从 C# 中的以下字符串中提取子字符串“John Woo”

CN=吴宇森,OU=IT,OU=HO,DC=ABC,DC=com

谢谢 !

4

6 回答 6

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

请注意,如果键不存在(如在字典中)或键不是唯一的(如在字典中),则不会出现异常。值为 a IEnumerable<TElement>

于 2013-09-30T11:28:15.503 回答
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;
}
于 2013-09-30T11:28:09.403 回答
1

试试这个(这是一个非通用答案):

var name = str.Split(',').Where(n => n.StartsWith("CN=")).FirstOrDefault().Substring(3);
于 2013-09-30T11:27:58.147 回答
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
于 2013-09-30T11:33:55.667 回答
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];

(上面没有显示错误处理 - 你当然必须添加一些。)

于 2013-09-30T11:33:38.803 回答
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);

结果是“吴宇森”

感谢你的帮助...

于 2013-09-30T12:12:00.813 回答