Как заменить [число] на {число - 1} с помощью регулярных выражений в C #? - PullRequest
1 голос
/ 07 марта 2019

У меня есть строковые значения, такие как A, something happened [1], something else [2], whatever [3], и я хочу заменить его на A, something happened {0}, something else {1}, whatever {2}.

Итак, в основном замените [ на { и ] на }, если естьчисло между, а затем уменьшите число между одним.Возможно ли это как-то с Regex?

Пока я получил это:

var text = "A, something happened [1], something else [2], whatever [3]";
var result = Regex.Replace(text, @"\[(\d+)\]", @"{$1}");
Console.Write(result);

Однако, это дает мне A, something happened {1}, something else {2}, whatever {3}.

Есть ли возможность уменьшить значениечисла по одному?

1 Ответ

2 голосов
/ 07 марта 2019

Вы можете уменьшить число в оценщике матча:

var text = "A, something happened [1], something else [2], whatever [3]";
var result = Regex.Replace(text, @"\[(\d+)\]", m => $"{{{int.Parse(m.Groups[1].Value)-1}}}");
Console.Write(result); // => A, something happened {0}, something else {1}, whatever {2}

См. Демонстрацию C #

В случае, если число не может быть приведено к использованию int int.TryParse:

var result = Regex.Replace(text, @"\[(\d+)\]", m => 
    int.TryParse(m.Groups[1].Value, out var number) ? $"{{{number - 1}}}" : m.Value);

Для C # до C # 7:

var result = Regex.Replace(text, @"\[(\d+)\]", m => {
         int number;
         if (int.TryParse(m.Groups[1].Value, out number))
         {
            return $"{{{number-1}}}";
         }
         else
         {
            return m.Value;
         }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...