2012-02-24 7 views
1

私はこれを抽出しようとするには余りにも多くの時間を費やしてきました。次のメッセージがあり、引数の前にメッセージ "data {{.....}}"のデータ部分を抽出します。私はメッセージの順序に頼ることができないので、引数は結果となり、コマンドはメッセージのどの順序でも見ることができます。マッチングブラケットで挑戦的な正規表現

invokeid 3 data {{GainID|Value(dB)} {0|0} {1|18} {2|17} {3|-1} {4|-255} {5|0} {6|12} {7|11} {8|10} {9|9} {10|8} {11|7} {12|6} {13|5} {14|4} {15|3} {16|2} {17|1} {18|0} {19|-1} {20|-2} {21|-3} {22|-4} {23|-5} {24|-6} {25|-7} {26|-8} {27|-9} {28|-10} {29|-11} {30|-12} {31|-13} {32|-14} {33|-15} {34|-16} {35|-17} {36|-18} {37|-19} {38|-20} {39|-21} {40|-22} {41|-23} {42|-24} {43|-25} {44|-26} {45|-27} {46|-28} {47|0}} arguments {{ DisplayGain -1 }} result 0 command OAMPCMD IPaddress 0.0.0.0 

これは私が

data {{GainID|Value(dB)} {0|0} {1|18} {2|17} {3|-1} {4|-255} {5|0} {6|12} {7|11} {8|10} {9|9} {10|8} {11|7} {12|6} {13|5} {14|4} {15|3} {16|2} {17|1} {18|0} {19|-1} {20|-2} {21|-3} {22|-4} {23|-5} {24|-6} {25|-7} {26|-8} {27|-9} {28|-10} {29|-11} {30|-12} {31|-13} {32|-14} {33|-15} {34|-16} {35|-17} {36|-18} {37|-19} {38|-20} {39|-21} {40|-22} {41|-23} {42|-24} {43|-25} {44|-26} {45|-27} {46|-28} {47|0}} 

を解析したい、次のコードで行われたいです。私は成功したあなたの助けが働く正規表現を構築することができませんでした

 string ret = String.Empty; 
     Regex regEx = new Regex("data {{.*}}"); 
     Match regExMatch = regEx.Match(iqMessage); 
     if (!regExMatch.Success) 
      throw new IqScriptControlMessageParseException(String.Format("Could not find {0}.", DATA)); 

     ret = regExMatch.Value.Substring(DATA.Length).Trim(); 

感謝されます。あなたは私が何を意味するか知っていれば、私は手動で抽出をコード化しようとしています...

おかげ

答えて

3

は、非欲張りマッチ(.*?代わりの.*)を使用して、カーリーをエスケープ(彼らは定期的に特別な意味を持っています式):

Regex regEx = new Regex(@"data \{\{.*?\}\}"); 
+0

これは、データに応じて、後で一致することができません。その問題を解決するには、バランシンググループをチェックしてください。 (http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspxを参照) – jessehouwing