2011-06-10 137 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;