2010-12-16 15 views
2

私は正規表現に慣れていません。正規表現を使用して特定の値を抽出する必要がある文字列があります。ここで私は上記の文字列からCNとOUの値、すなわち "ReportingGroup {b4f3d644-9361-461e-b604-709fa31f2b9e}" と "DOMのUSERS"Regex - Cを使った値の抽出#

を取得したい文字列

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

です。どのように私はそれのための正規表現のパターンを構築することができますか?

答えて

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があなたのために何をするのかを効果的に行うことができます。 –

+0

@Mr。 TA - なぜRegExが望ましいのかを考えてください。 – Oded

+1

Oded - 正規表現は、文字列を解析するために特別に作成されました。あなたのソリューションには12行のコードが含まれていますが、Regexではすべてが1行に収まります。しかし、行数はさておき、ホイールを再発明する理由は全くありません。さらに、初心者の開発者がRegexを学ぶためには、この比較的簡単な解決策があるので、良い演習です。 –

5

次の操作を行います。

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

@ NLVあなたが正規表現の専門家ではない場合は、それは普通の中国語から中国人以外の人々です:) –

+0

これは良いですが、それはodedの解決よりも速いということに同意しません。 –

1

あなたの文字列がかなりよく構造化されているように見えます。 IndexOf()Substring()のような通常の文字列関数を使用することを検討してください。正規表現は読んで理解するのが難しいです。

0

あなたは絶対に正規表現を使用したい場合は、次のコードは、すべてのKEY = VALUEのペアかかわらず反復します:

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