Регулярное выражение заменить вычислениями?

#c# #regex

#c# #регулярное выражение

Вопрос:

Возможно ли как-то выполнить замену регулярных выражений вычислением в результате? (в VS2010)

Например:

 Grid.Row="{[0-9] }"
  

Для

 Grid.Row="eval(int(1)   1)"
  

Ответ №1:

Вы можете использовать MatchEvaluator для достижения этой цели, например

  String s = Regex.Replace("1239", @"d", m => (Int32.Parse(m.ToString())   1).ToString());

Output: 23410
  

Редактировать:
Я только что заметил… если вы имеете в виду «использование функции поиска-замены VS2010», а не «использование C #», то, боюсь, ответ «нет».

Ответ №2:

Вы всегда можете использовать захват для извлечения любых значений, необходимых для ваших вычислений, а затем выполнить замену регулярных выражений на новое регулярное выражение, построенное на основе вашего уравнения и любых захваченных вами значений.

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

Ответ №3:

К сожалению, C # и .NET не предоставляют eval метода или эквивалента. Однако можно либо использовать библиотеку для синтаксического анализа выражений (быстрый поиск в Google выдал мне этот анализатор математических выражений .NET), либо написать свой собственный (что на самом деле довольно просто, ознакомьтесь с алгоритмом маневровой площадки и постфиксной нотацией). Просто запишите группу, затем выведите значение группы в библиотеку / метод, который вы написали.


Редактировать: теперь я вижу, что вы хотите это для программы VS2010. Это недостижимо, если вы не напишете свое собственное расширение VS. Вы всегда можете написать программу для поиска и замены вашего кода и ввести в нее код, а затем заменить исходный код его выводом.