c# 批量替换源码中的图片地址,后面的文件名不变只替换前面的 http 到 图片名前面的 / 这个正则怎么写,
原始代码如下:
<img src=https://www.abc.com/wp-content/uploads/2017/03/MAMP-PRO.png alt="alt内容" /><span class="entry-meta">
<img src=https://efg.com/wp-content/uploads/2017/03/Twixl-Publisher.png alt="alt内容" /></a>
我要把 src=xxxx 的替换掉 然后 /MAMP-PRO.png 以后的内容保持不变,
也就是批量替换中间的这一串,https://www.abc.com/wp-content/uploads/2017/03 后面的图片名有上百个,每个都不同,这个正则该怎么写,
使用下面这句虽可以替换,但是正则写的有问题,导致所有的图片变成了一个结果,小弟正则不精,麻烦各路高手帮忙解决下,或者有什么其它方法进行替换。
Regex.Replace(richTextBox1.Text, "(?<=<img src=)[\s\S]*?(?= alt)", "www.aaa.com");
var repacedHtml = System.Text.RegularExpressions.Regex.Replace(html, @"(?<=<img\s+?src=).+?(?=\s)", m =>
{
var src = m.Value.TrimStart('"').TrimEnd('"');
var fileName = System.IO.Path.GetFileName(src);
return string.Format(""/{0}"", fileName);
});
自己慢慢体会吧,(sb cnblogs回复代码自动被修改有BUG)
。。。谢谢帮忙了。不过只提取图片这我知道,我是想取src=至图片名中间的地址
如:src=(这是我想匹配的地址)/图片.jpg
我是想弄个能提取中间地址的正则,因为要把这些地址全部替换掉,而图片片是要保留的,最后再返回回处理过后的源码,因为匹配的结果是个集合,我用 Regex.Replace() 进行替换会使这个过程重复执行,而地址全部会变成一样,就像下面这个结果一样,图片名变成了死的
或者有什么其它的方法能实现我这功能,把html源码里的图片地址批量更改,
没看明白,这个是放在哪,我是需要先把网页中的所有图片地址找出来,然后替换之些地址,但是图片名字是需要不变的,前变图片名前面的地址,而地址的格式也是不同的,
如:
<img src="http://www.baidu.com/img.png"><span>test</span
<a href="#"><img src="http://www.baidu.com/aaa/123.png"></a>
<img src="www.baidu.com/aaa/123/user.png">
<img src=http://www.bbb.com/img.png alt="" width="">
图片名我要留着,前面地址则需要替换,
得到结果:src="www.aaa.com/MAMP-PRO.png"
这只是一个小demo,你要替换成什么,你就在“src=“此处写你想替换成什么内容“
注意"要转义
@心悠魂然: ...兄弟,没看明白问题吗,一个网页里有几十个图片,我替换的是图片名前面的地址,你这方法是把所有图片地址都换成了一个,连图片名也给写死了,我要的是图片名保持原样不动,只替换图片名前面 / 的所有地址,而且地址也是没有规律的,如我之前回身你的那些 img 地址一样。
@lixia7: 何时动过你的图片名?替换的是/以前的内容,图片名还在原处保留,并未修改。
前面的地址不一样,你只能自己把图片取出来循环遍历,再一一替换成你所需的地址了;我还以为是你的地址都是一样的,只是需要替换。
你可以把你要替换成的地址先存起来。用时再取。
@心悠魂然: 行不通,不知道是不是我写的有问题,读的地址本身就放在了 MatchCollection 中,如果能单独的提取出图片的 http://www.baidu.com/ 这部分,保留文件名就很好解决,
<img src="http://www.baidu.com/img.png"><span>test</span
======================================
string html = richTextBox1.Text; //源码
string temp = "";
string rule = "(?<="><img src=)[\s\S]?(?= alt)";
//string rule = "(?<=<img class="service-action-img" src=").?(?=")";
Regex reg = new Regex(rule);
MatchCollection coll = reg.Matches(richTextBox1.Text); //得到匹配
foreach (Match item in coll)
{
string code = item.Value; //初始地址
temp = item.Value;
temp = code.Substring(code.LastIndexOf("/")).Replace("/", string.Empty); //分割文件名
string path = "www.baidu.com/images/";
string imgurl = path + temp;
richTextBox2.Text = Regex.Replace(html,rule,path+temp);//替换
}
====================
源数据:
https://www.abc.com/wp-content/uploads/2017/03/MAMP-PRO.png
https://efg.com/wp-content/uploads/2017/03/Twixl-Publisher.png
http://efg.com/wp-content/uploads/2017/03/Twixl-Publisher.png
正则:https?://.*/
匹配结果:
共找到 3 处匹配:
https://www.abc.com/wp-content/uploads/2017/03/
https://efg.com/wp-content/uploads/2017/03/
http://efg.com/wp-content/uploads/2017/03/
====================
楼主也可以直接获取src的全部值,然后用last的斜线/分割,然后存入字典,循环替换。
..虽然是正确的,只不过一张网页不止这几个链接,还有a,link,script等各种标签,
如这个地址的源码:https://q.cnblogs.com/q/111210/ 找到图片地址,保留图片名就完美了,
不过这个正则琢磨了一阵子。。。没弄出来
正确的正则:(?<=src=")([^\/\s]*/)+