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

时间:2013-04-29 13:55:25

标签: c# regex

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

Regex类并不神奇。

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

您需要pass a lambda expression

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