c# – 在regex.Replace中对命名捕获组执行操作

如果这是重复的话,我会提前道歉 – 我无法想象以前没有被问过 – 但我似乎无法找到它.

为什么下面的第二个c#语句会抛出异常?

var regex = new Regex(@"\[IMG(?<image_number>[0-9]+)\]");
regex.Replace("[IMG1]", int.Parse("${image_number}").ToString());

我知道我可以访问命名组,但我无法对它执行操作 – 在本例中为int.Parse().当我尝试以这种方式使用命名组时,它只给我字符串“${image_number}” – 当然不能将其解析为整数.

谢谢.

最佳答案 正则表达式并不神奇.

它不能神奇地将捕获的值插入到Replace调用中出现的字符串文字中.
相反,如果将引用捕获组的字符串传递给Replace()方法,它将解析出字符串并插入值.

你需要pass a lambda expression

regex.Replace("[IMG1]", m => int.Parse(m.Groups["image_number"].Value).ToString());
点赞