【问题标题】:How do I replace [number] to {number - 1} using Regex in C#?如何在 C# 中使用 Regex 将 [number] 替换为 {number - 1}?
【发布时间】:2019-07-29 09:11:15
【问题描述】:

我有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}

是否可以选择将数字减一?

【问题讨论】:

  • @Peter B: 感谢编辑,我在那里打错字了...

标签: c# regex replace


【解决方案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# demo

如果数字不能转换为 int 使用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;
         }
    });

【讨论】:

  • 我会试试这个。我想,这就是我要找的:)
  • @FranzHuber23 如果您愿意,可以将 int 替换为 long,只要确保使用最适合您的场景的选项即可。
  • @Wiktor Stribiżew 我把你的代码放在一行中:var result = Regex.Replace(text, @"\[(\d+)\]", m => int.TryParse(m.Groups[1].Value, out var number) ? $"{{{number - 1}}}" : m.Value);。当然,如果值是long,我可以简单地使用long.TryParse。感谢您的快速回复。
  • @FranzHuber23 是的,它将从 C#7 开始工作,因为 out argument "can pass without its declaration and initialization".
  • @Wiktor Stribiżew 感谢您提供更多信息,我并没有真正寻找 C# 版本,因为我一直在使用最新功能,但很高兴能将这一点告知其他人。
猜你喜欢
  • 2012-10-20
  • 2019-01-10
  • 2016-11-15
  • 2020-01-14
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
相关资源
最近更新 更多