2010-10-19 229 views
2

我試圖讓所有的下列標記之間的文本,它只是不workind 正則表達式

If Not String.IsNullOrEmpty(_html) Then 
       Dim regex As Regex = New Regex(_ 
          ".*<entry(?<link>.+)</entry>", _ 
          RegexOptions.IgnoreCase _ 
          Or RegexOptions.CultureInvariant _ 
          Or RegexOptions.Multiline _ 
          ) 

      Dim ms As MatchCollection = regex.Matches(_html) 
      Dim url As String = String.Empty 
      For Each m As Match In ms 
       url = m.Groups("link").Value 
       urls.Add(url) 
      Next 
      Return urls 

我已經寫了我的獲取功能來獲取HTML作爲字符串。我一直在尋找的HTML敏捷包的例子,我沒有保存爲HTML文檔

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.htm"); 
foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    HtmlAttribute att = link["href"]; 
    att.Value = FixLink(att); 
    } 
    doc.Save("file.htm"); 
+0

Obligatory Obligatory:http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2010-10-19 16:59:28

+0

來自同一問題的另外兩個有價值的或翔實的答案: http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1733489#1733489 http://stackoverflow.com/questions/1732348/regex-match-open -tags-except-xhtml-self-contained-tags/1758162#1758162 – 2010-10-19 17:12:35

+0

最後使用基本的XML parsing.XMLdocument – vbNewbie 2010-10-21 19:24:56

回答

1

強制性文件「不使用正則表達式解析HTML」警告:

使用正則表達式解析SO上已經詳細介紹了HTML。請閱讀以下職位:

RegEx match open tags except XHTML self-contained tags

有沒有可能到您的HTML轉換爲XHTML和使用XPath解析呢?

使用類似HTML TidySGML的工具可以進行此轉換。然後你可以使用xpath來提取所需的數據://entry/link

4

我會用這個軟件來幫助你的正則表達式。

免費RegExBuilder軟件。

2

在.Net中執行此操作的最佳方法是通過HTML Agility Pack。在html上使用正則表達式通常不是一個好主意。

例外的是情況下,您可以對HTML的結構的某些假設,如一次性的工作(在這裏你可以學習你的程序實際輸入),或當由可信源生成的HTML。例如,你可以假設html格式正確,或者標籤不會嵌套超過特定深度? (請注意,這些假設本身都不足以構建一個不會因給定邊緣情況或其他情況而下降的表達式。)

如果您符合此條件,我們需要確切知道您允許哪些假設使我們能寫出一個準確的表達。