2011-06-10 91 views
1

我一直在試圖解決這些問題的最後兩個小時,但似乎我找不到任何解決方案。提取鏈接正則表達式c#

我需要從HTML文件中提取鏈接。有100多個鏈接,但只有25個是有效的。

的有效鏈接都放在裏面

<td><a href=" (link) ">

首先,我有(現在仍然有)與逐字字符串中雙引號的問題。所以,我用「正常」的字符串替換逐字這樣我就可以使用\「爲」,但問題是,這Regex我寫不工作

Match LinksTemp = Regex.Match(
           htmlCode, 
           "<td><a href=\"(.*)\">", 
           RegexOptions.IgnoreCase); 

我得到"<td><a href="http://www.google.com">輸出,而不是http://www.google.com

任何人都知道如何解決這個問題,我該如何使用雙引號逐字字符串內(例如@「<>‘DAS’SA」)

回答

2

轉義雙引號樣本:@"some""test"
正則表達式示例:"<a href=\"(.*?)\">"

var match = Regex.Match(html, "<td><a href=\"(.*?)\">", 
RegexOptions.Singleline); //spelling error 
    var url = match.Groups[1].Value; 

而且你可能想如果你想抓住每個元素使用代碼只需像這樣使用Regex.Matches(...)代替Regex.Match(...)

+0

是的,THX但爲什麼犯規,如果我寫的羣體它的工作[0] – Triple 2011-06-10 23:47:00

+0

+1爲gppd解釋。 – corlettk 2011-06-11 00:13:43

2

string htmlCode = "<td><a href=\" www.aa.pl \"><td> <a href=\" www.cos.com \"><td>"; 
Regex r = new Regex("<a href=\"(.*?)\">", RegexOptions.IgnoreCase); 
MatchCollection mc = r.Matches(htmlCode); 

foreach (Match m1 in mc) {     
    MessageBox.Show(m1.Groups[1].ToString()); 
} 
+0

+1代表完整的示例代碼。 – corlettk 2011-06-11 00:13:00

1

爲什麼不與HTML-parsing是解析此良好和快速的HTML解析。 例如:

string HTML = "<td><a href='http://www.google.com'>"; 

      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml(HTML); 
      HtmlNodeCollection a = doc.DocumentNode.SelectNodes("//a[@href]"); 

      string url = a[0].GetAttributeValue("href", null); 

      Console.WriteLine(url); 
      Console.ReadLine(); 

你需要導入using HtmlAgilityPack;