我制作RSS阅读器,我需要使用正则表达式找到路径网址图片(Google RSS)。 来自RSS的URL图像例如: RSS频道为https://news.google.com/?output=rss。
<img src="//t0.gstatic.com/images?q=tbn:ANd9GcRfMZ3MOzznCthFKCdIan17n9B8vZvEE-tRSQVTcgJa5i1OPfdf90zi4mBuGzPfB7Bj2mwE0TE" alt="" border="1" width="80" height="80" />
顺便说一句。我使用正则表达式:
Regex regx = new Regex("\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
RegexOptions.IgnoreCase);
一些建议?
答案 0 :(得分:0)
您可以使用以下正则表达式模式:
/(.*\/images.*)/
答案 1 :(得分:0)
首先,你不应该用正则表达式解析xml - &gt;使用XmlDocument,XmlParser,Readers,...
如果您知道自己在做什么,那就是快速而肮脏的正则表达式解决方案。
因为Feed是自动生成的,所以每次标签看起来都是相同的顺序(我们将这个事实用于更短的正则表达式)
每个img代码都以<
开头(但请记住第1点 - &gt; xml编码)
正在寻找&lt;然后是img
(当前正则表达式:<img
接下来是至少一个空白字符。 (当前正则表达式:lt;img\s+
src属性始终是第一个属性(在本例中),如果存在,所以我们选择src="
(当前正则表达式:<img\s+src="
)
接下来用.*
选择网址列表,但要小心*
量词是贪婪的,所以我们必须使用延迟量化.*?
,最后用"
最终正则表达式:<img\s+src="(.*?)"
请确保为网址使用括号以便于群组选择。
最后一步:C#代码
//quick & dirty :-)
var url = "https://news.google.com/?output=rss";
var regex = @"<img\s+src="(.*?)"";
var RssContent = new StreamReader(((HttpWebRequest)HttpWebRequest.Create(url)).GetResponse().GetResponseStream()).ReadToEnd();
foreach (Match match in Regex.Matches(RssContent, regex))
{
//print img urls
Debug.WriteLine(match.Groups[1]);
}
PS:如果你正在尝试编写一个RSS阅读器,你应该不使用正则表达式解析html!试图找到一种方法将html转换为xaml并在WPF中编写您的读者,或者通过研究一些开源RSS阅读器开始学习更多关于这些问题的方法