如何在C#中使用Regex将[number]替换为{number-1}?

时间:2019-03-07 13:06:15

标签: c# regex replace

我有类似A, something happened [1], something else [2], whatever [3]的字符串值,并想将其替换为A, something happened {0}, something else {1}, whatever {2}

因此,如果之间有一个数字,则基本上将[替换为{,将]替换为},然后将数字减少1。正则表达式有可能吗?

到目前为止,我知道了:

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 个答案:

答案 0 :(得分:2)

您可以减少比赛评估器中的数字:

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# demo

如果无法将数字转换为整数,请使用int.TryParse

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

对于C#7之前的C#:

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;
         }
    });