#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. Вы всегда можете написать программу для поиска и замены вашего кода и ввести в нее код, а затем заменить исходный код его выводом.