[英]Regex to parse and replace img src in C#/.NET?
嗨,
我有问题,看; 我有像这样的字符串:
<img width="594" height="392" src="/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG" alt="" style="margin:5px;width:619px;height:232px" />
它们的格式不一致。
我需要解析这样的字符串,并返回以下内容:
<img width="594" height="392" src="/exploding%20the%20VDI%20vDesktop-VDI3.PNG" alt="" style="margin:5px;width:619px;height:232px" />
变化:
因此,如果文件当前位于/blabla/bla/blaaaaah/pickles/pickle.png
然后我要让IMG SRC属性说pickles-pickle.png
现在,我一直在尝试使用regex进行此操作,但是3个小时后,我发现了一些关于自己的信息...我对regex感到很糟糕。 我可能会在这里待上几个星期,而且我永远都找不到。
因此,我要向这个美好的社区提出两件事:
现在针对眼前的问题,我想我可以在我的位置做一个string.replace。
但是,DAMN很难看。 正则表达式会更漂亮,您不觉得吗?
有什么建议吗?
注意:我将其标记为“家庭作业”,但这不是家庭作业。 我下班后自愿参加工作,以挽救20万英镑的公司成本。 从字面上看,这是一个(对我而言)令人费解的难题的最后一部分。 当然,我看不到这20万美分的一分钱,但是我看起来很好。
要获取标签,我建议使用HtmlAgilityPack 。 这比在整个HTML页面上执行正则表达式更安全。
使用类似这样的方法来获取图像节点:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
var imgs = doc.DocumentNode.SelectNodes("//img");
使用类似这样的东西来获取/设置属性:
foreach (var img in imgs)
{
string orig = img.Attributes["src"].Value;
//do replacements on orig to a new string, newsrc
img.SetAttributeValue("src",newsrc);
}
那么,您应该做什么替换呢? 我确实同意使用Regex更优雅。 毕竟这些都是为了这些!
这样的事情应该可以解决问题:
string s = @"/sites/it_kb/SiteAssets/Pages/exploding%20the%20VDI%20vDesktop/VDI3.PNG";
string n = Regex.Replace(s,@"(.*?)\/([^\/]*?)\/([^\/]*?)$",@"/$2-$3");
您可以用来学习C#正则表达式的一些资源:
(?<=src=)"[^" ]*\/(?=[^\/"]*\/)
试试这个。用empty string
替换。
http://regex101.com/r/dZ1vT6/50
必须警告您它是一种hack.Html不应该用正则表达式解析。
取代这个
(?i)(?<=<img\s[\s\S]*?src=")(?:[^"]*\/)+(?=[^"]*\/)([^\/]*)\/([^"]+)
至:
/$1-$2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.