Разбор регулярного выражения

272
30 декабря 2017, 01:34

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

В тексте находится фрагмент примерно такого вида: 1-1-1-1, нужно его при помощи регулярного выражения хочу выделить найти его, после каждую группу разделенную спецсимволом "-" нужно дополнить другими цифрами.

Например:

  • Входная строка: "1-1-1-1"
  • Регулярное выражение: "(?<code>(\d?\d?)-(\d?\d?\d)-(\d)-(\d?\d?\d?\d))"

Данная строка удовлетворяет регулярному выражению и в ней выделяются 5 групп: "code", 1, 2, 3, 4

Нужно как-то на основе регулярного выражения код привести к виду: 01-001-1-0001

Проблема в том, что таких масок может быть несколько, как впрочем и входных значений: 11-2-3-44 должно стать: 11-002-3-0044

Думал может можно как-то узнать, какая часть регулярного выражения сработала на какой фрагмент текста и данный фрагмент на основе синтаксиса регулярного выражения достроить?

Или вообще не в ту сторону смотрю и нужно как-то по другому это все делать?

Дополнение:

Регулярные выражения это мое решение выдернуть фрагмент из текста.

Допустим текст содержит следующие символы:

"1-1-1-1 ололо 12-34-222-1 олололо 12.23-34.5"

Для выдёргивания нужных фрагментов реализованы несколько масок:

"\d{1,2}-\d{1,3}-\d-\d{1,4}"
"\d{1,2}-\d{1,2}-\d{1,4}-\d"
"\d{1,2}\.\d{1,2}-\d{1,2}\.\d{1,5}"

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

"01-001-1-0004 ололо 12-34-0222-1 олололо 12.23-34.00005"
Answer 1

Воспользуйтесь перегрузкой Regex.Replace, принимающей MatchEvaluator:

string pattern = @"(\d{1,2})-(\d{1,3})-(\d)-(\d{1,4})";
string s = @"1-1-1-1 olololo 2-3-4-5";
string r = Regex.Replace(s, pattern,
    m => $"{m.Groups[1].Value.PadLeft(2, '0')}-{m.Groups[2].Value.PadLeft(3, '0')}-{m.Groups[3].Value.PadLeft(1, '0')}-{m.Groups[4].Value.PadLeft(4, '0')}");
Console.WriteLine(r);

Выведет:

01-001-1-0001 olololo 02-003-4-0005

READ ALSO
Как программно изменить title другого окна? И как программно менять xaml элементы?

Как программно изменить title другого окна? И как программно менять xaml элементы?

Как программно изменить title другого xaml окна? Из xaml страницы? Пробовал так - MainMenuTitle = "new title";(MainMenu объявил), но выбивает ошибку -

225
Парсер json с декодированием текста

Парсер json с декодированием текста

В Json встречаются такие тексты \u0432\u043b\u0435, есть ли какой нибудь online парсер Json, который бы декодировал такой текст ?

251
Как передать в контроллер значение из списка select

Как передать в контроллер значение из списка select

Не ожидал наткнуться на проблему в таком вопросе и тем не менееВот мое представление :

240