工作缓慢的原因和解决方案

时间:2014-01-09 00:42:31

标签: c# regex

这是我使用正则表达式的功能。它正在努力工作,但它的标签非常缓慢。 我认为它是逐字符搜索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 个答案:

答案 0 :(得分:1)

将outputStr更改为StringBuilder,如果要追加很多项目,这将提高您的速度。如前所述,使用正则表达式解析HTML可能是一个问题(很大程度上取决于您的输入)。

答案 1 :(得分:0)

解析HTML的麻烦在于它不是一门精确的科学。如果你正在解析它是XHTML,那么事情会容易得多。
因为HTML不一定是格式良好的XML,所以在解析它时会遇到很多问题 它几乎需要在逐个站点的基础上完成。

您不应该使用Regex解析HTML。(尽管您可以在上面的代码中使用已编译的Regex,但要快一点。)
正则表达式不是用于解析HTML的。您可以使用第三方库来解析专门为此目的而构建的HTML List of HTML Parsing Libraries
如果您不想使用第三方库,则可以使用System.Windows.Forms.WebBrowser来实现此目的 您也可以使用Fizzler,它使用HTML敏捷包,但扩展了对jQuery的支持 然后是Majestic-12 HTML Parse,非常快 您还可以使用TidyNet.Tidy将HTML转换为XHTML,然后使用XML解析器。

请检查以下example有关正确使用Regex会降低性能的方法。