【问题标题】:How to replace with Regex.Replace [duplicate]如何用 Regex.Replace 替换 [重复]
【发布时间】:2015-05-08 15:18:33
【问题描述】:

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

(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 + "\"");

【问题讨论】:

  • @Biffen 我在 C# 中需要它。
  • 旁注:请考虑使用 MSDN 获取如何使用函数的初始示例。 IE。 Regex.Replace 显示了有效的代码,它可以帮助理解为什么您的版本没有。

标签: c# regex replace


【解决方案1】:

这行得通

    string input = "(src=\"cid:image001.png@01D081C1.C5908B40\")";
    string replacement = "src=\"\\\\resources\\\\images\\\\$1\"";
    Regex rgx = new Regex("src=\"cid:(image[0-9]+\\.png)@[A-Za-z0-9]+\\.[A-Za-z0-9]+\"");
    Console.WriteLine(rgx.Replace(input, replacement));

输出:(src="\\resources\\images\\image001.png")

DEMO

【讨论】:

  • 谢谢。它对我有用。
【解决方案2】:
fileName =
  Regex.Replace(body,
                "[src=\"cid:" + fileName + "@](*)[\"]",
                "src=\"\\Resources\\Email\\" + emailID + "\\" + fileName + "\"");

【讨论】:

    【解决方案3】:

    有几件事要记住:

    • 使用变量初始化正则表达式模式时,请使用Regex.Escape(例如,image001.png 中有一个点,因此必须在模式中将其转义为image001\.png
    • 在替换字符串中使用变量时,最好添加 .Replace("$","$$") 来替换文字 $s(例如 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"")");
    

    输出:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多