执行“regex.Replace”中的“Named Capture Group”操作
本文关键字:Capture Group 操作 Named 中的 Replace 执行 regex | 更新日期: 2023-09-27 18:11:15
如果这是重复的,我提前道歉——我无法想象以前没有人问过——但我似乎找不到它。
为什么下面的第二个c#语句抛出一个异常?
var regex = new Regex(@"'[IMG(?<image_number>[0-9]+)']");
regex.Replace("[IMG1]", int.Parse("${image_number}").ToString());
我知道我可以访问命名组,但是我不能对它执行操作——在本例中是int.Parse()。当我尝试以这种方式使用命名组时,它只给我字符串"${image_number}"——当然,它不能被解析为整数。
谢谢。
Regex
类并不神奇。
它不能神奇地将捕获的值插入到出现在Replace
调用中的字符串字面值中。
相反,如果您将引用捕获组的字符串传递给Replace()
方法,它将解析字符串并插入值。
需要传递一个lambda表达式:
regex.Replace("[IMG1]", m => int.Parse(m.Groups["image_number"].Value).ToString());