现在有这么一个需求,我在编辑文档的时候,需要将文档内所有的标签替换需要的内容。
例如:
<p>
<img src=\"http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg\" title=\"356019.jpg\" alt=\"356019.jpg\"/>
<img src=\"http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg\" title=\"356019.jpg\" alt=\"356019.jpg\"/>
</p>
替换为:
<p>
<img src="empty.png" data-original=\"http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg\" title=\"356019.jpg\" alt=\"356019.jpg\"/>
<img src="empty.png" data-original=\"http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg\" title=\"356019.jpg\" alt=\"356019.jpg\"/>
</p>
前提是要保证src和data-original都只能在一个标签中出现一次!
因为每次替换掉src之后,访问编辑页面之后,又会生成一个src,如果直接替换的话,就会存在多个data-original
在此先感谢各位朋友,第一次在这上面问,没C币,还请各位帮帮忙
先还原一下啊:
1)去掉 src="empty.png"
2)把 data-original= 替换为 src=
然后再做现在这个替换。
static void RegexReplaceSrc()
{
string html = @"<p>
<img src=""http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg"" title=""356019.jpg"" alt=""356019.jpg""/>
<img src=""http://localhost:9186/upload/image/20150416/6356482317004106408355884.jpg"" title=""356019.jpg"" alt=""356019.jpg""/>
</p>";
if (!Regex.IsMatch(html, @"\bdata-original\b"))
{
Console.WriteLine(Regex.Replace(html, @"src=(""[^""]*"")", @"src=""empty.png"" data-original=$1"));
}
}
string html = @"<p>
<script src=""http://www.localhost.com/js.js""></script>
<img src=""http://localhost:9186/upload/image/111111111111.jpg"" data-original="""" title=""356019.jpg"" alt=""356019.jpg""/>
<img title=""356019.jpg"" alt=""356019.jpg"" src=""http://localhost:9186/upload/image/222222222222.jpg"" />
<img src=""http://localhost:9186/upload/image/333333333333.jpg"" data-original=""http://localhost:9186/upload/image/333333333333.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
<img data-original=""http://localhost:9186/upload/image/44444444444.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
</p>";
Console.WriteLine(html);
Console.WriteLine("替换后");
Console.WriteLine(Regex.Replace(html, @"<img(?<imgStart>\b[^<>]*?\b)(?<imgSrc>src[\s\t\r\n]*=[\s\t\r\n]*)(?<imgUrl>[""']?[\s\t\r\n]*[^\s\t\r\n""'<>]*)(?<imgOriginal>data-original[\s\t\r\n]*=[\s\t\r\n]*?[""']?[\s\t\r\n]*[^\s\t\r\n""'<>]*)?(?<imgEnd>[^<>]*?/?[\s\t\r\n]*)>", @"<img $1$2""empty.jpg"" data-original=$3$4>"));
Console.ReadKey();
static void RegexReplaceSrc2()
{
string html = @"<p>
<script src=""http://www.localhost.com/js.js""></script>
<img src=""http://localhost:9186/upload/image/111111111111.jpg"" data-original="""" title=""356019.jpg"" alt=""356019.jpg""/>
<img title=""356019.jpg"" alt=""356019.jpg"" src=""http://localhost:9186/upload/image/222222222222.jpg"" />
<img src=""http://localhost:9186/upload/image/333333333333.jpg"" data-original=""http://localhost:9186/upload/image/333333333333.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
<img data-original=""http://localhost:9186/upload/image/44444444444.jpg"" title=""356019.jpg"" alt=""356019.jpg"" testProperty=""test_info""/>
</p>";
var tmp = Regex.Replace(html, @"<img\s+[^>]*\bsrc=""[^""]*""[^>]*/>", x =>
{
string v = x.Value;
if (!Regex.IsMatch(x.Value, @"\bdata-original\b"))
{
v = Regex.Replace(x.Value, @"src=(""[^""]*"")", @"src=""empty.png"" data-original=$1");
}
return v;
});
Console.WriteLine(tmp);
}