我正在寻找一个正则表达式,以分离img的src值。 (我知道这不是最好的做法,但这是我在这种情况下必须要做的)
我有一个包含简单HTML代码、一些文本和一个图像的字符串。我需要从该字符串中获取src属性的值。到目前为止,我只能够分离整个标签。
string matchString = Regex.Match(original_text, @"(<img([^>]+)>)").Value;
我正在寻找一个正则表达式,以分离img的src值。 (我知道这不是最好的做法,但这是我在这种情况下必须要做的)
我有一个包含简单HTML代码、一些文本和一个图像的字符串。我需要从该字符串中获取src属性的值。到目前为止,我只能够分离整个标签。
string matchString = Regex.Match(original_text, @"(<img([^>]+)>)").Value;
string matchString = Regex.Match(original_text, "<img.+?src=[\"'](.+?)[\"'].*?>", RegexOptions.IgnoreCase).Groups[1].Value;
.+?
,所以可能会有各种字符... - HinekRegex.Match(original_text, "<img.*?src=[\"'](.+?)[\"'].*?>", RegexOptions.IgnoreCase).Groups[1].Value;
пјҲзҝ»иҜ‘з»“жһңпјҡиҝҷж®өд»Јз ҒжӯЈеёёе·ҘдҪңгҖӮпјү - Unknown Coder我知道你说必须使用正则表达式,但如果可能的话,我真的希望给这个开源项目一个机会:HtmlAgilityPack
它非常易于使用,我刚刚发现它并且它已经帮助了我很多,因为我正在做一些比较复杂的HTML解析。它基本上允许你使用XPath获取元素。
他们的示例页面有点过时,但API非常容易理解,如果您稍微熟悉XPath,您将在短时间内掌握它。
您的查询代码大致如下(未编译的代码):
List<string> imgScrs = new List<string>();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(htmlText);//or doc.Load(htmlFileStream)
var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]"); s
foreach (var img in nodes)
{
HtmlAttribute att = img["src"];
imgScrs.Add(att.Value)
}
我尝试了Francisco Noriega建议的方法,但似乎HtmlAgilityPack的API已经被修改了。以下是我的解决办法:
List<string> images = new List<string>();
WebClient client = new WebClient();
string site = "http://www.mysite.com";
var htmlText = client.DownloadString(site);
var htmlDoc = new HtmlDocument()
{
OptionFixNestedTags = true,
OptionAutoCloseOnEnd = true
};
htmlDoc.LoadHtml(htmlText);
foreach (HtmlNode img in htmlDoc.DocumentNode.SelectNodes("//img"))
{
HtmlAttribute att = img.Attributes["src"];
images.Add(att.Value);
}
SelectNodes
调用中真的放入 //img[@src](或在获取att.Value之前检查其是否存在)。并且要么检查结果是否为null,要么在SelctNodes
调用中添加 ?? new HtmlNodeCollection(null);
。否则,你会收到 NullReferenceException
。 - jessehouwing<img.+?src="(.+?)".+?/?>
正则表达式应该如下:
(<img.*?src="([^"])".*?>)
你也可以使用后顾之忧来完成它,而无需提取出一个组
(?<=<img.*?src=")[^"]*
记得在必要时转义引号
</? *img[^>]*>
这是我使用的一个:
<img.*?src\s*?=\s*?(?:(['"])(?<src>(?:(?!\1).)*)\1|(?<src>[^\s>]+))[^>]*?>
好的一点是它与以下任何一个匹配:
<img src='test.jpg'>
<img src=test.jpg>
<img src="test.jpg">
它还可以匹配一些意外情况,比如额外的属性,例如:
<img src = "test.jpg" width="300">