2013-10-14 4 views
1

У меня есть сообщение, как показано ниже, и у меня есть 2 регулярных выражения, нацеленных на это.C# Regex General Matching

Для regex rh, он работал хорошо. Хотя для regex rh1 я не могу понять, и матч должен вернуть что-то вроде "{{0:0.00}%,{ABND,1000},/,{OFRD,1002}}" вместо "{0:0.00", которое будет заменено на окончательное значение.

Буду признателен за любые советы.

T.Format = "T1 Message: {{0:0.00}%,{ABND,1000},/,{OFRD,1002}}"; 


Regex rh = new Regex(@"{{(.*?)}(.*?),{(.*?),(.*?)},(.*?),{(.*?),(.*?)}}"); 
Match mh = rh.Match(T.Format); 
Regex rh1 = new Regex(@"{(.*?)}"); 
Match mh1 = rh1.Match(T.Format); 
decimal decReturn = 0; 
string h1 = mh.Groups[1].Value.ToString(); 
string h2 = mh.Groups[2].Value.ToString(); 
string h3 = mh.Groups[3].Value.ToString(); 
string h4 = mh.Groups[4].Value.ToString(); 
string h5 = mh.Groups[5].Value.ToString(); 
string h6 = mh.Groups[6].Value.ToString(); 
string h7 = mh.Groups[7].Value.ToString(); 

switch (h5) 
{ 
    case "+": decReturn = 0; break; 
    case "-": decReturn = 0; break; 
    case "*": decReturn = 0; break; 
    case "/": decReturn = Convert.toInt32(h7) > 0 ? Convert.toInt32(h4)/Convert.toInt32(h7) * 100 : 0 * 100; 
          break; 
    default: throw new Exception("invalid logic"); 
} 

string strReplace = mh1.Groups[1].Value.ToString(); 
string strReturn = string.Empty; 
strReturn = Convert.ToString(decReturn); 
strReturn = Convert.ToString(T.Format).Replace(strReplace, strReturn); 
+0

Вы должны уточнить свой вопрос. В коде не сказано, чего вы пытаетесь достичь. Можете ли вы предоставить нам ожидаемый ввод и ожидаемый результат для этого ввода? – mortb

+0

Anyways; это домашнее задание? – mortb

ответ

0

Вот проблема:

{(.*?)} 
    ^
    This makes a lazy match, one character at time 

Вместо заменить:

{(.*)}