2014-01-09 26 views
1

這裏是我使用正則表達式的函數。它正在努力工作,但它的速度非常緩慢。 我認爲它是按字符搜索html代碼的字符。所以它的工作很慢。有沒有解決工作緩慢的問題。緩慢工作的原因和解決方案

string s = Sourcecode(richTextBox6.Text); 
     // <a ... > </a> tagları arasını alıyor.(taglar dahil) 
     Regex regex = new Regex("(?i)<a([^>]+)>(.+?)</a>"); 
     string gelen = s; 
     string inside = null; 
     Match match = regex.Match(gelen); 
     if (match.Success) 
     { 
      inside= match.Value; 
      richTextBox2.Text = inside; 
     } 
     string outputStr = ""; 
     foreach (Match ItemMatch in regex.Matches(gelen)) 
     { 
      Console.WriteLine(ItemMatch); 
      inside = ItemMatch.Value; 
      //boşluk bırakıp al satır yazıyor 
      outputStr += inside + "\r\n"; 
     } 
     richTextBox2.Text = outputStr; 
+2

請勿使用正則表達式。使用適當的HTML解析庫,如Html Agility Pack。你會看到速度提高了十倍。 –

+0

任何不同的想法,爲什麼它採取標籤緩慢? – believeitornot

+0

這可能會減慢它,如果有很多和很多要追加。 'outputStr + = inside +「\ r \ n」;' –

回答

0

解析HTML的麻煩在於它不是一門精確的科學。如果它是你解析的XHTML,那麼事情會更容易。
因爲HTML不一定是格式良好的XML,所以你會遇到很多試圖解析它的問題。
它幾乎需要在逐個站點的基礎上完成。

你不應該使用正則表達式解析HTML(儘管你可以在上面的代碼中使用已編譯好的正則表達式,使它快一點)
正則表達式不是用於解析HTML的。您可以使用第三方庫來解析專門爲此目的而構建的HTML。
List of HTML Parsing Libraries
如果您不想使用第三方庫,那麼您可以使用System.Windows.Forms.WebBrowser來達到此目的。
您也可以使用Fizzler,它使用HTML敏捷包,但已經擴展支持jQuery 然後有Majestic-12 HTML Parse,這非常快。
您也可以使用TidyNet.Tidy將HTML轉換爲XHTML,然後使用XML解析器。

請查看以下example關於正確使用正則表達式會如何降低性能的問題。

1

將outputStr更改爲一個StringBuilder,如果您追加很多項目,這將增加您的速度。正如已經提到的用正則表達式解析HTML可能是一個問題(取決於您的輸入)。

相關問題