2010-12-16 2 views
2

Reguläre Ausdrücke sind mir nicht vertraut. Ich habe eine Zeichenfolge, aus der ich bestimmte Werte mit Regex extrahieren muss. Hier ist der StringExtrahieren von Werten mit Regex - C#

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

ich die Werte von CN und OU nämlich "Reporting {b4f3d644-9361-461e-b604-709fa31f2b9e}" und "DOM USERS"

aus der obigen Zeichenfolge erhalten möchten. Wie kann ich das Regex-Muster dafür konstruieren?

Antwort

7

Sie brauchen keine RegEx dafür.

Wenn Sie die Zeichenfolge mit , aufgeteilt und dann jeder resultierenden Zeichenfolge mit =, können Sie die Tasten, um den Wert für die CN und die OU Schlüssel zu extrahieren schauen.

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

Dies setzt voraus, dass CN und OU nur einmal in der Zeichenfolge erscheinen.

+0

ich gegen diesen Weg gehen raten würde. Indem Sie manuelle Splits durchführen, würden Sie effektiv tun, was Regex hinter den Kulissen für Sie tun wird. –

+0

@Mr. TA - Können Sie bitte erläutern, warum eine RegEx vorzuziehen ist? – Oded

+1

Oded - Regexes wurden speziell für die Analyse von Strings erstellt. Ihre Lösung umfasst 12 Zeilen Code, während bei Regex das Ganze in einen Einzeiler passt. Aber abgesehen davon, gibt es keinen Grund, das Rad neu zu erfinden. Außerdem ist es eine gute Übung für einen Anfänger, Regex jetzt zu lernen, da sie diese relativ einfache Aufgabe zu lösen haben. –

5

Gehen Sie wie folgt:

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

@ NLV Sehen Sie, was ich meine ?, Wenn Sie kein Regex-Experte sind, ist es Chinesisch zu nicht-chinesischen Menschen :) –

+0

das ist auch gut, aber ich bin nicht einverstanden, es ist schneller als Oded's Lösung. –

1

Es sieht aus wie die Zeichenfolge ist ziemlich gut strukturiert. Erwägen Sie die Verwendung normaler String-Funktionen wie IndexOf() und Substring(). Regex sind schwerer zu lesen und zu verstehen.

0

Wenn Sie unbedingt wollen Regex verwenden, der folgende Code wird iterieren obwohl alle Schlüssel = Wert-Paare:

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