![](/img/trans.png)
[英]HTML Agility pack - parsing img src and href from relative paths
[英]RegEx to get href and src from HTML content?
我試圖從HTML字符串中提取href和src鏈接。 根據這篇文章 ,我能夠獲得圖像部分。 任何人都可以幫助調整正則表達式以包含集合中的href URL嗎?
public List<string> GetLinksFromHtml(string content)
{
string regex = @"<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>";
var matches = Regex.Matches(content, regex, RegexOptions.IgnoreCase | RegexOptions.Singleline);
var links = new List<string>();
foreach (Match item in matches)
{
string link = item.Groups[1].Value;
links.Add(link);
}
return links;
}
Okie Doke! 沒有“額外的圖書館”,“快速和輕松”,這里你去:
<(?<Tag_Name>(a)|img)\b[^>]*?\b(?<URL_Type>(?(1)href|src))\s*=\s*(?:"(?<URL>(?:\\"|[^"])*)"|'(?<URL>(?:\\'|[^'])*)')
或者作為C#字符串:
@"<(?<Tag_Name>(a)|img)\b[^>]*?\b(?<URL_Type>(?(1)href|src))\s*=\s*(?:""(?<URL>(?:\\""|[^""])*)""|'(?<URL>(?:\\'|[^'])*)')"
這會將標記名稱( a
或img
)捕獲到組“Tag_Name”中,將URL類型( href
或src
)捕獲到組“URL_Type”中,將URL捕獲到組“URL”中(我知道,我有點創意)與組名稱)。
它處理任何類型的引號( "
或'
),即使URL中的任何類型的引號應該已經編碼到實體中,它也會忽略任何單個轉義的引號字符\\'
和\\"
。
它不會忽略未關閉的標簽(因此格式錯誤的HTML),它會找到其中一個標簽(如<a
或img
)的開頭,然后繼續忽略除大於( >
)以外的所有內容,直到找到匹配的URL類型為屬性( href
為a
標簽和src
為img
標簽),然后匹配的內容。 它然后退出並且不擔心標簽的其余部分!
如果您希望我為您分解,請告訴我,但以下是為此頁面所做的匹配示例:
<Match> 'Tag' 'URL_Type' 'URL'
---------------------------------------- ----- ---------- -----------------------------
<a href="http://meta.stackoverflow.com" a href http://meta.stackoverflow.com
<a href="/about" a href /about
<a href="/faq" a href /faq
<a href="/" a href /
<a id="nav-questions" href="/questions" a href /questions
...
<img src="/posts/8066248/ivc/d499" img src /posts/8066248/ivc/d499
它總共發現了140個標簽(我假設額外的海報會有所增加)
下面的代碼可以幫助你獲取html中的每個鏈接,獲得它們之后你可以在鏈接中獲得更多細節元素:
string html = "123<a href=\"http://www.codeios.com/home.php\">123123</a>789";
Regex r = new Regex(@"<a.*?href=(""|')(?<href>.*?)(""|').*?>(?<value>.*?)</a>");
foreach (Match match in r.Matches(html))
{
string url = match.Groups["href"].Value;
string text = match.Groups["value"].Value;
Response.Write(url + text);
}
我只是簡單地描繪了快速正則表達式,但經過測試和工作,請告訴我這是否適合您的需求。 (url和img是按名稱分組的,因此它們很容易檢索)
<a(.*?)href="(?P<url>.*?)"(.*?)><img(.*)src="(?P<img>.*?)"(.*?)></a>
您還可以通過添加?來捕獲沒有鏈接的圖像? 簽署<a>
和</a>
標記,如下所示:
(<a(.*?)href="(?P<url>.*?)"(.*?)>)?(<img(.*)src="(?P<img>.*?)"(.*?)>)(</a>)?
夏嘉曦
太可怕了! 因為用正則表達式解析html是邪惡的
<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?href\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>
有幾個地方可以找到鏈接和圖像。
-Link
-href
(?<AttributeName>(?:href))\s*=\s*["'](?<AttributeValue>(?:[^"'])*)
for c# = (?<AttributeName>(?:href))\s*=\s*[""'](?<AttributeValue>(?:[^""'])*)
-Image
-Image_DirectSource
-src
-background
(?<AttributeName>(?:src|background))\s*=\s*["'](?<AttributeValue>(?:[^"'])*)
for c# = (?<AttributeName>(?:src|background))\s*=\s*[""'](?<AttributeValue>(?:[^""'])*)
_Image_IndirectSource
-style
-background:url()
background\s*:\s*url\s*\(\s*(?<AttributeValue>(?:[^)])*)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.