Передача доп.параметров в System.Text.RegularExpressions.Regex.Replace

284
29 апреля 2017, 20:17

Как передать в MatchEvaluator доп.параметры. Сейчас я использую статические переменные для передачи, но как-то это некрасиво

using System.Text.RegularExpressions;
...
//Наш подстановщик MatchEvaluator
protected static string ReplaceForDisplayString(System.Text.RegularExpressions.Match m)
{
  //Что-то что использует передаваемый параметр
}
//Основной код
string pattern = @"\{([0-9]{1,}|[P]{1})\}";//Паттерн не важен, он может быть и другим
Regex rgx = new Regex(pattern);
//Тут запускаем подстановщик по регулярке, 
//однако в подстановщик нужно передать параметр, 
//который будет там использоваться
string newStr = rgx.Replace(str, new MatchEvaluator(ReplaceForDisplayString));

UPD: сейчас у меня что-то типа:

using System.Text.RegularExpressions;
...
//Вот это параметр я передаю как-то по топорному
protected static object parameter = null; 
protected static string ReplaceForDisplayString(System.Text.RegularExpressions.Match m)
{
  //Тут я его как-то использую
  return parameter.ToString();
}
string pattern = @"\{([0-9]{1,}|[P]{1})\}";//Паттерн не важен, он может быть и другим
Regex rgx = new Regex(pattern);
parameter = "abcd";
string newStr = rgx.Replace(str, new MatchEvaluator(ReplaceForDisplayString));
Answer 1

Как насчет?

protected static string ReplaceForDisplayString(Match m, string parameter)
{
  return parameter.ToString();
}

string pattern = @"\{([0-9]{1,}|[P]{1})\}";
Regex rgx = new Regex(pattern);
string newStr = rgx.Replace(str, m => ReplaceForDisplayString(m, "abcd"));

Как верно заметил Grundy - new MatchEvaluator() можно опустить.

Подробнее про лямбда-выражения.

READ ALSO
TwoWay Binding для Dictionary<Enum, bool?>

TwoWay Binding для Dictionary<Enum, bool?>

Есть несколько checkbox'ов с тремя состояниями: включено, исключено, не установлено

303
Имя таблицы через переменную в запросе Mysql

Имя таблицы через переменную в запросе Mysql

Есть множество однотипных таблиц, различных только по именам и даннымКоличество столбцов и их названия идентичны

360
C# Вложенность при парсинге скобок

C# Вложенность при парсинге скобок

Необходимо написать программу, которая будет получать на вход строку и выводить эту же строку, с учётом расставленных скобок и их вложенности

285
BitmapImage Не удается декодировать изображение

BitmapImage Не удается декодировать изображение

Сохраняю изображение в массив байтов, перед этим произвел конвертацию изображения в JPEG

257