2010-12-16 47 views
2

我對正則表達式不太瞭解。我有一個字符串,我需要使用正則表達式提取特定的值。這裏是字符串使用正則表達式提取值 - C#

CN=ReportingGroup {b4f3d644-9361-461e-b604-709fa31f2b9e},OU=DOM USERS,DC=domain,DC=com 

我想CN和OU即 「ReportingGroup {b4f3d644-9361-461e-b604-709fa31f2b9e}」 的價值觀和 「DOM USERS」

從上面的字符串。我怎樣才能構建正則表達式模式呢?

回答

7

對於此,您不需要RegEx。

如果用=分割使用,然後每個結果字符串的字符串,可以通覽鍵,以便提取的CN和價值OU鍵。

string cn; 
string ou; 
foreach(string adPortion in myString.Split(new Char [] {','})) 
{ 
    string[] kvp = adPortion.Split(new Char [] {'='}) 

    if(kvp[0] == "CN") 
     cn = kvp[1]; 

    if(kvp[0] == "OU") 
     ou = kvp[1]; 
} 

這假定CNOU僅在字符串中出現一次。

+0

我建議不要走這條路。通過執行手動拆分,您將有效地完成Regex在幕後爲您做的事情。 – 2010-12-16 13:45:02

+0

@Mr。 TA - 請問您可以詳細說明爲什麼RegEx更好? – Oded 2010-12-16 13:48:45

+1

Oded - 正則表達式專門用於解析字符串。您的解決方案涉及12行代碼,而使用正則表達式時,整個事情都符合一行代碼。但是,除了線數外,沒有任何理由重新發明輪子。此外,對於初學者開發人員現在學習Regex是一個很好的練習,他們有這個相對簡單的任務來解決。 – 2010-12-16 13:59:22

5

執行以下操作:

new Regex("CN=(?<CN>[^,]*),OU=(?<OU>[^,]*)").Match(str).Groups["CN"].Value; 
+5

@ NLV明白我的意思?如果你不是正則表達的專家,那麼對於非中國人來說,它就是純漢語:) – 2010-12-16 13:46:42

+0

這也不錯,但不會認同它比oded的解決方案更快。 – 2010-12-17 22:36:50

1

它看起來像你的字符串是很好的結構。考慮使用常規字符串函數,如IndexOf()Substring()。正則表達式很難閱讀和理解。

0

如果你絕對要使用正則表達式,下面的代碼將遍歷儘管所有鍵值對:

 foreach (Match m in 
      Regex.Matches(inputString, @"[,]*([^=]+)=([^,]*)")) 
     { 
      string key = m.Groups[1].Value; 
      string value = m.Groups[2].Value; 
     }