C#中使用正則表達式提取超連接地址的集中方法(轉)

通常在作爬蟲或者CMS的時候常常須要提取 href連接或者是src地址。此時能夠使用正則表達式輕鬆完成。

Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{
richTextBox2.Text += m.Groups["url"].Value + "\n";//獲得href值
richTextBox2.Text += m.Groups["text"].Value + "\n";//獲得<a><a/>中間的內容
}
方法2:
<PRE class="brush: c-sharp;">Regex r;
Match m;
r = new Regex("href\\s*=\\s*(?:\"(?<1>[^\"]*)\"|(?<1>\\S+))",
RegexOptions.IgnoreCase|RegexOptions.Compiled);
for (m = r.Match(inputString); m.Success; m = m.NextMatch())
{
Console.WriteLine("Found href " + m.Groups[1] + " at " + m.Groups[1].Index);
}
</PRE> html

方法3:提取img src的
<PRE class="brush: c-sharp;">Regex reg = new Regex(@"(?i)<img[^>]*?\ssrc\s*=\s*(['""]?)(?<src>[^'""\s>]+)\1[^>]*>");
MatchCollection mc = reg.Matches(yourStr);
foreach (Match m in mc)
{ Console.Write(m.Groups["src"].Value + "\n");
}
</PRE> 正則表達式

方法4:
提取img src
<PRE class="brush: c-sharp;">
/// <summary>
/// 獲取Img的路徑
/// </summary>
/// <param name="htmlText">Html字符串文本</param>
/// <returns>以數組形式返回圖片路徑</returns>
public static string[] GetHtmlImageUrlList(string htmlText)
{
Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", RegexOptions.IgnoreCase);
//新建一個matches的MatchCollection對象 保存 匹配對象個數(img標籤)
MatchCollection matches = regImg.Matches(htmlText);
int i = 0;
string[] sUrlList = new string[matches.Count];
//遍歷全部的img標籤對象
foreach (Match match in matches)
{
//獲取全部Img的路徑src,並保存到數組中
sUrlList[i++] = match.Groups["imgUrl"].Value;
}
return sUrlList;
}</PRE> 數組

相關文章
相關標籤/搜索