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

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


因此,如果之间有一个数字,则基本上[用{和]替换},然后将之间的数字减一。正则表达式可以以某种方式实现吗?


到目前为止,我得到了这个:


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}.


有没有将数字减一的选项?


慕尼黑的夜晚无繁华
浏览 80回答 1
1回答

白板的微信

您可以减少匹配评估器中的数字: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 use 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;         }    });
打开App,查看更多内容
随时随地看视频慕课网APP