我正在尝试从HTML字符串中提取href和src链接。 According to this post,我能够得到图像部分。任何人都可以帮助调整正则表达式以包含集合中的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;
}
答案 0 :(得分:8)
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中的任何类型的引号应该已经编码到实体中,它也会忽略任何单个转义的引号字符{ {1}}和\'
。
它不会忽略未关闭的标记(因此格式错误的HTML),它会找到其中一个标记的开头,例如\"
或<a
,然后继续忽略除大于({{}之外的所有内容{1}})直到找到属性的匹配网址类型(img
代码>
和href
代码a
),然后匹配内容。然后它退出并且不担心标签的其余部分!
如果您希望我为您分解,请告诉我,但以下是为此页面所做的匹配示例:
src
它总共发现了140个标签(我假设额外的海报会有所增加)
答案 1 :(得分:0)
我刚刚快速绘制了快速正则表达式,但经过测试和工作,请告诉我这是否适合您的需求。 (url和img是按名称分组的,因此它们很容易检索)
<a(.*?)href="(?P<url>.*?)"(.*?)><img(.*)src="(?P<img>.*?)"(.*?)></a>
你还可以通过添加?来捕捉没有链接的图像?签署<a>
和</a>
代码,如下所示:
(<a(.*?)href="(?P<url>.*?)"(.*?)>)?(<img(.*)src="(?P<img>.*?)"(.*?)>)(</a>)?
晒
答案 2 :(得分:0)
太可怕了! 因为用正则表达式解析html是邪恶的
<img[^>]*?src\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?href\s*=\s*[""']?([^'"" >]+?)[ '""][^>]*?>
答案 3 :(得分:0)
下面的代码可以帮助您获取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);
}
答案 4 :(得分:-1)
有几个地方可以找到链接和图片。
-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>(?:[^)])*)