2010-03-16 5 views
0

я есть различные строки, которые выглядят так:Анализировать и заменить строку с помощью Regex

$(gateway.jms.jndi.ic.url,0,tibjmsnaming, tcp)/topic/$(gateway.destination.prefix)$(gateway.StatusTopicName),$(gateway.jms.jndi.ic.username),$(gateway.jms.jndi.ic.password),abinding,tBinding 

я пытаюсь выяснить способ извлечь $ (...) секции и заменить их с некоторыми другими строка.

все равно в C# для анализа этих групп и поочередно заменять другую строку?

Благодаря

ответ

5

Это регулярное выражение будет захватывать те разделы:

\$\([^)]+\)

Затем замените, как это (этот пример изменяет каждый матч на это прописные эквивалент - вы можете добавить любые пользовательские логика):

Regex.Replace(candidate, @"\$\([^)]+\)", delegate(Match m) { 
    return m.ToString().ToUpper(); 
}); 
+0

Отлично! что, если я хочу, чтобы результат совпадения был без символов '$' или '(' ')? спасибо –

0

Я не так хорош с делегатом. Вот что я придумал с использованием регулярного выражения Андрея:

string test1 = @"$(gateway.jms.jndi.ic.url,0,tibjmsnaming, tcp)/topic/$(gateway.destination.prefix)$(gateway.StatusTopicName),$(gateway.jms.jndi.ic.username),$(gateway.jms.jndi.ic.password),abinding,tBinding"; 

      string regex1 = @"\$\([^)]+\)"; 

      var matches = Regex.Matches(test1, regex1); 

      Console.WriteLine(matches.Count); 
      foreach (Match match in matches) 
      { 
       test1 = test1.Replace(match.Value, "your String");     
      } 
      Console.WriteLine(test1); 
+0

, вам следует прямо использовать Regex.Replace вместо вашей петли foreach – PierrOz

+0

спасибо, что я понял. – DotNetWala

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