如何从指定的alt标记字符串抓取URL
本文关键字:字符串 抓取 URL alt | 更新日期: 2023-09-27 18:10:47
我想从下面的字符串中提取"http://www.somewebsite.com/wanted.jpg",其中alt
设置为"thumbnail"
,并避免抓取http://www.somewebsite.com/notwanted.jpg
:
<span>Some information here
<div>
<img src="http://www.somewebsite.com/notwanted.jpg" width="15" height="15" alt="emoticon">
<img src="http://www.somewebsite.com/wanted.jpg" alt="thumbnail">
</div>
</span>
最简单的方法是什么?
尽管有关于使用regex解析html的所有警告,但这个c# regex将匹配您想要的url:
(?<=src=")[^"]+(?="[^">]*?alt="thumbnail")
看演示。
在c#中测试:
var myRegex = new Regex("(?<=src='")[^'"]+(?='"[^'">]*?alt='"thumbnail'")");
string resultString = myRegex.Match(s1).Value;
Console.WriteLine(resultString);
输出:http://www.somewebsite.com/wanted.jpg
- 后面的
(?<=src=")
断言前面的是src="
-
[^"]+
匹配所有不是"
的字符(这就是我们想要的) - 前向
(?="[^">]*?alt="thumbnail")
断言后面是引号,任何不是引号或>
后面跟着' alt="thumbnail"的字符
参考
- 零长度断言的前向和后向
- 掌握向前看和向后看
假设你的字符串是在htmlText
,你可以很容易地加载它与htmllagilitypack,然后执行select:
HtmlDocument html = new HtmlDocument();
html.LoadHtml(htmlText);
var src = html.DocumentNode
.SelectSingleNode("//img[@alt='thumbnail']").GetAttributeValue("src","");
您可以使用下面的正则表达式来获取img src,其中alt
被设置为thumbnail
,
'"[^'"]*'"(?='s*alt='"thumbnail'")
演示如果您不希望在输出中出现双引号,您可以尝试下面的正则表达式,
'"'K[^'"]*(?='"'s*alt='"thumbnail'")
演示解释:
-
'"'K
'K丢弃先前匹配的字符,在我们的例子中,它丢弃先前的"
标记。 -
[^'"]*
匹配零次或多次双引号以外的字符。 -
(?='"'s*alt='"thumbnail'")
正向前看用于检查紧接在"
之后的字符串必须是"'s*alt="thumbnail"