4

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

为什么下面的第二条 c# 语句会引发异常?

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

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

谢谢。

4

1 回答 1

2

Regex课堂不是魔术。

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

您需要传递一个 lambda 表达式

regex.Replace("[IMG1]", m => int.Parse(m.Groups["image_number"].Value).ToString());
于 2013-04-29T13:57:24.580 回答