替换正则表达式结果中的单个匹配

时间:2014-05-06 11:54:42

标签: c# regex

我正在准备HTML格式的电子邮件。图像必须捆绑在多部分mime中,并重写引用。模板HTML在一个文件中,我写了一个正则表达式来查找文件名:

using (var sr = new StreamReader("ApproveUserTemplate.html"))
  html = sr.ReadToEnd();
var matches = Regex.Matches(html, "\\s*img\\s+src\\s*=[\"'](.*.\\w{3})[\"']");

表达式匹配,括号表示将捕获一个组。因此,对于包含<img src="blort.png" />的文件,我得到一个包含三个组的匹配项,其中match.Groups [1] .Value返回字符串&#34; blort.png&#34;。

到目前为止,这么好,但我从msdn文档中看不到的是你如何去替换。在这种情况下,我想用blort.png替换cid:blortguid(我构造了一个名称表,将文件名映射到标识链接资源的GUID)。

我不能在单个操作中进行批量替换,因为我需要遍历匹配,逐步构建名称表,构造LinkedResource实例并将它们添加到消息AlternateView对象中。在创建资源并分配ContentIds之前,替换值甚至不存在。

有一种获取匹配集合的机制。我希望迭代这个,做相关的管理员,计算替换值并在该特定匹配上执行替换。

如何在特定的Match实例上执行替换?

如果这不是受支持的模型,那么展示Match对象集合的重点是什么?

1 个答案:

答案 0 :(得分:0)

我得出的结论是,我在问题中描述的迭代用法是不可能的。

然而,对于所描述的情况,使用两个通道有一些优点:

  1. 迭代匹配。当名称不在名称表中时,创建链接资源,将其添加到消息中。
  2. 迭代名称表。使用string.Replace来交换从名称表中获取的相应cid:resourceid的每个文件名。
  3. 这样做可以直接使用多次链接的资源的单个副本。