首页 > 解决方案 > 从图像 src 中删除查询字符串参数

问题描述

我想从图像中删除任何跟踪参考。例如:

<img class="pixel" src="pixel.gif?tracking=123456">
<img src="pixel1.gif?t=654321">

我想从问号后的电子邮件正文中的所有图像中删除所有内容。我想用 Regex 和 Replace 来做这样的事情:

Regex rRemScript = new Regex(@"??< The part i would like help with >???");
messageBody = rRemScript.Replace(messageBody, "");

所以我需要正则表达式部分的帮助来查找所有 <image src 并在“?”之后获取所有内容。

最终结果:

<img class="pixel" src="pixel.gif">
<img src="pixel1.gif">

标签: c#regex

解决方案


使用以下代码中的正则表达式:

[TestMethod]
public void TestMethod1()
{
   var input = @"balbla <img class=""pixel"" src=""pixel.gif?tracking=123456"">
<img src=""pixel1.gif?t=654321"" class=""pixel1""> blablabla";

   var regex = new Regex("(<img[^>]*)src=\"([^\"?]*)?[^\"]*\"");

   // test
   var r = regex.Replace(input, "$1src=\"$2\"");

   var expected = @"balbla <img class=""pixel"" src=""pixel.gif"">
<img src=""pixel1.gif"" class=""pixel1""> blablabla";

   Assert.AreEqual(expected, r);

}

正则表达式部分的解释:

(<img[^>]*)src=\":匹配img标签直到它们的src属性。保存匹配的部分,()以便稍后在替换调用中进行反向引用。

([^\"?]*): 得到 uri 部分直到第一个?。保存它以供反向引用。

[^\"]*\": 获取 uri 的剩余部分。

将其替换为$1src=\"$2\",其中$1包含第一个、$2第二个保存的反向引用。


推荐阅读