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