【问题标题】:Extract a substring from a string [duplicate]从字符串中提取子字符串[重复]
【发布时间】:2026-01-06 17:25:01
【问题描述】:

如何在 C# 中从下面的字符串中提取子字符串“Amy Java”?

CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com

【问题讨论】:

  • 你有没有尝试过?,然后添加问题。
  • 从外观上看;它似乎是一个 LDAP 字符串。那样的话,你肯定能拿到域名。
  • 我在文本框中获取了上述字符串,我需要从中提取子字符串“Amy Java”
  • 用','分割它,然后用'='分割输出
  • 我已经标记了一个答案,但作者删除了它。

标签: c# substring


【解决方案1】:

这对我有用:

var amyJavaText =
    "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com"
        .Split(',')
        .Select(x => x.Split('='))
        .ToLookup(x => x[0], x => x[1])["CN"]
        .First();

【讨论】:

  • 这有点矫枉过正,但我​​喜欢你寻找钥匙
  • 我希望名称中没有任何转义/引用的,= 字符...
  • @Rawling - 是的,同意。
【解决方案2】:

这就是你所需要的。

string result = str.Split(',')[0].Split('=')[1];

【讨论】:

    【解决方案3】:

    除了更通用的方式外,您还可以创建Dictionary(如果提供的字符串中存在唯一值)或KeyValuePair 列表(对于当前字符串示例),如下所示:

    var str = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
    
    var dict = str.Split(',').Select(s=> s.Split('=')).ToDictionary(a => a[0].Trim(), a => a[1].Trim()); //Only if Key are unique 
    var kvp =  str.Split(',').Select(s=> s.Split('=')).Select(a=> new KeyValuePair<string,string>( a[0].Trim(), a[1].Trim()));
    

    然后您可以使用另一个Linq 来选择所需的密钥。

    var requiredValue = kvp.Where(u=> u.Key == "CN").Value;
    

    会给你所需的价值。

    【讨论】:

      【解决方案4】:
      private string[] FindKeyValue(string str, string key)
      {
          return str.Split(",".ToCharArray())
              .Select(x => x.Split("=".ToCharArray()))
              .Where(x => x[0] == key).Select(x => x[1]).ToArray();
      }
      

      假设您想知道 CN、OU、DC 等的值。您拥有的字符串看起来像一个键值对,其中“CN”是键,“Amy Java”是一个值。似乎一个键可以在字符串中出现多次。因此,一个键有多个值。 按如下方式使用:

      var str1 = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
      string[] valuesOfCN = FindKeyValue(str1, "CN");
      

      如果您只想要一个值,例如第一个值,请使用

      var str1 = "CN=Amy Java,OU=Singapore,OU=Users,DC=domain,DC=com";
      string firstValueOfCN = FindKeyValue(str1, "CN").First();
      

      【讨论】: