如何用Regex.Replace替换

时间:2015-05-08 15:18:34

标签: c# regex replace

我有特殊情况需要替换字符串

(src="cid:image001.png@01D081C1.C5908B40")

以下

(src="\\resources\\images\\image001.png")

在给定的文本中。

它应该替换所有出现在给定文本中的事件。

我试过这样但是没有按预期工作。

fileName ="image001.png"; 

Regex.Replace(body, "[src=\"cid:" + fileName + "@](*)[\"]", "src=\"\\Resources\\Email\\" + emailID + "\\" + fileName + "\"");

3 个答案:

答案 0 :(得分:0)

fileName =
  Regex.Replace(body,
                "[src=\"cid:" + fileName + "@](*)[\"]",
                "src=\"\\Resources\\Email\\" + emailID + "\\" + fileName + "\"");

答案 1 :(得分:0)

这有效

(src="\\resources\\images\\image001.png")

输出:ShowDialog()

DEMO

答案 2 :(得分:0)

有几件事需要记住:

  • 使用变量初始化正则表达式模式时,请使用Regex.Escape(例如,image001.png中有一个点,因此必须在模式中将其转义为image001\.png
  • 在替换字符串中使用变量时,最好添加.Replace("$","$$")来替换文字$(例如emailID.Replace("$", "$$"))。
  • 在编写正则表达式模式时使用verbatim string literals是个好主意,以免使用双重转义(这有助于在线和其他正则表达式测试工具中进行rgex编写和测试)。

我猜不出你的emailID变量是什么样的,因此,我不会在替换字符串中使用变量来获得你想要的输出。

所以,我建议的代码:

var fileName = "image001.png";
var body = "(src=\"cid:image001.png@01D081C1.C5908B40\")";
var pattern = @"(\(src="")cid:(" + Regex.Escape(fileName) + @")@.*""\)"; // will look like (\(src=")cid:(image001\.png)@.*"\)
var restt = Regex.Replace(body, pattern, @"$1\\resources\\images\\$2"")");

输出:

enter image description here

enter image description here