【问题标题】:Extract a substring from a string in C#从 C# 中的字符串中提取子字符串
【发布时间】:2013-09-30 11:18:29
【问题描述】:

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

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

谢谢!

【问题讨论】:

标签: c# substring


【解决方案1】:

你可以使用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

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

【讨论】:

    【解决方案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;
    }
    

    【讨论】:

      【解决方案3】:

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

      var name = str.Split(',').Where(n => n.StartsWith("CN=")).FirstOrDefault().Substring(3);
      

      【讨论】:

        【解决方案4】:

        类似的东西

        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
        

        【讨论】:

          【解决方案5】:

          你可以先用逗号分割字符串,得到一个字符串数组,每个字符串都是由=分隔的名称/值对:

          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];
          

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

          【讨论】:

            【解决方案6】:

            我自己创建了下面的代码,最后得到了我需要的子字符串。以下代码适用于我要提取的每个子字符串,该子字符串位于“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);
            

            结果是“吴宇森”

            感谢大家的帮助...

            【讨论】:

              猜你喜欢
              • 2018-09-29
              • 2011-07-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-23
              • 1970-01-01
              相关资源
              最近更新 更多