【问题标题】:Reasons of working slowly and solution of that [duplicate]工作缓慢的原因和解决方案[重复]
【发布时间】:2014-01-27 09:04:50
【问题描述】:

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

【问题讨论】:

  • 不要使用正则表达式。使用适当的 HTML 解析库,如 Html Agility Pack。您会看到速度提高了十倍。
  • 有什么不同的想法为什么它的标签速度很慢?
  • 如果有很多要追加的内容,这可能会减慢速度。 outputStr += inside + "\r\n";
  • 我喜欢这些问题.... 参考..stackoverflow.com/questions/1732348/… 进行 HTML 正则表达式解析
  • 啊啊啊!又一个“用正则表达式解析 HTML”问题!没人再找了吗? “正则表达式 html 解析”在此处的热门搜索发现 Using regular expressions to parse HTML: why not? 作为最佳结果。

标签: c# regex


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    查看以下example,了解不正确使用 Regex 会如何降低性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      相关资源
      最近更新 更多