2012-04-25 4 views
0

У меня есть длинная строка, где у меня есть «зарезервированные слова», которые мне нужно заменить их значением из db.C# regex заменить проблемы с динамическими совпадениями?

eg. 

string text = "You're salary for the month of ((month)) is ((salary)) 

Теперь то, что я сделал, чтобы соответствовать каждому и каждый зарезервированное слово, а затем искать через мой набор данных, а затем заменить те, с их значением

Regex ex = new Regex(@"(?<=\(\().*?(?=\)\))"); 
foreach(Match match in ex.Matches(body)){   
       string valuefromset = values.FirstOrDefault(val => val.Variable == match.Value).Value; 
        var pattern = @"(("+match.Value+"))"; 
        body = Regex.Replace(body, pattern, valuefromset, RegexOptions.IgnoreCase); 
       } 
      } 

Теперь, что происходит это

text = "You're salary for the month of ((April)) is (($10000))"; 

Я не был уверен, почему шаблон просто получит слова, а не теги. Должен ли я использовать другое регулярное выражение, но с конкретным значением? Наличие определенного зарезервированного слова является значимым в шаблоне, поэтому я использовал его, не был уверен, что я делаю.

Любая помощь приветствуется. Благодаря!!!

+0

Ничего напрямую связанного, но вы должны использовать «Твой», а не «Ты». – Shimrod

+1

Неизвестно, существуют ли токены (зарезервированные слова) в строке? Есть много потенциальных токенов? Похоже, что использование метода StringBuilder .Replace будет более эффективным и менее сложным. – MyItchyChin

ответ

4

Это потому, что вы не избежать косых черт в регулярных выражениях заменить

var pattern = @"(("+match.Value+"))"; 
       ^^    ^^ 

вы их не сопрягая, вы создаете две группы. Попробуйте следующее:

var pattern = @"\(\("+match.Value+"\)\)"; 
+0

тоже попробовал. такой же предмет – gdubs

+0

oh мой плохой сделал! я; делал строковый шаблон и давал мне ошибку «непризнанного побега», когда я делаю закрывающий парик. благодаря!! – gdubs

Смежные вопросы