2012-02-24 2 views
1

나는 이것을 추출하는 데 너무 많은 시간을 보내고 있습니다. 다음 메시지가 있는데 인수 앞의 "data {{.....}}"메시지의 데이터 부분을 추출하려고합니다. 나는 메시지의 순서에 의지 할 수 없기 때문에 인자 결과와 명령은 메시지의 순서에 상관없이 보일 수있다.일치하는 대괄호를 사용하는 도전적인 정규식

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

내가 성공적으로 당신의 도움이 작동하는 정규식을 구축 할 수 없습니다 :

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

을 구문 분석 할 싶어 그리고 그것은 다음 코드로 이루어집니다 감사하겠습니다. 나는 그들이 일반에 특별한 의미를 가지고 (...

감사

답변

3

사용이 아닌 욕심 경기 (대신 .*.*?을) 당신이 무슨 뜻인지 아시죠 경우에는 수동 추출을 코드에 대해 생각하고, 중괄호를 탈출 표현식) :

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

데이터에 따라 이후의 결과와 여전히 일치하지 않을 수 있습니다. 이 문제를 해결하려면 조정 그룹을 확인하십시오. (http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396452.aspx 참조) – jessehouwing