2016-10-07 80 views
-2

如何在C#中從下面的字符串中提取子字符串「Amy Java」?從字符串中提取子字符串

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

你嘗試過什麼

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

?,然後添加的問題。 –

+2

從它的外觀;它似乎是一個LDAP字符串。在這種情況下,你絕對可以獲得域名。 – A3006

+0

我得到上面的字符串在一個文本框,並從那我需要提取子字符串「Amy Java」 –

回答

1

這就是你需要的一切。

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

這個工作對我來說:

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(); 
+0

這有點矯枉過正,但我​​喜歡你找的鑰匙 – Doruk

+0

我希望這個名字沒有任何轉義的引號或'='字符... – Rawling

+0

@Rawling - 是的,同意。 – Enigmativity

0

除了更通用的方法,你可以創建一個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; 

會給你所需的價值。

0
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」是一個關鍵和「艾米的Java」是一種價值。似乎密鑰可以在字符串中出現多次。因此你有一個以上的鍵值。如下 使用它:如果你想只是一個單一的值,如第一個值,然後使用

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