为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕尼黑的夜晚无繁华 2022-10-15 14:45:05
我有类似的字符串值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}.有没有将数字减一的选项?
查看完整描述

1 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

您可以减少匹配评估器中的数字:


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;

         }

    });


查看完整回答
反对 回复 2022-10-15
  • 1 回答
  • 0 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信