c# – 提高正则表达式效率

c# – 提高正则表达式效率,第1张

概述我有大约100k Outlook邮件项目,每个身体有大约500-600个字符.我有一个包含580个关键字的列表,必须搜索每个正文,然后在底部附加单词. 我相信我已经提高了大部分功能的效率,但它仍然需要很多时间.即使是100封电子邮件也需要大约4秒钟. 我为每个关键字列表运行两个函数(每个列表290个关键字). public List<string> Keyword_Search(HtmlNode 我有大约100k Outlook邮件项目,每个身体有大约500-600个字符.我有一个包含580个关键字的列表,必须搜索每个正文,然后在底部附加单词.

我相信我已经提高了大部分功能的效率,但它仍然需要很多时间.即使是100封电子邮件也需要大约4秒钟.

我为每个关键字列表运行两个函数(每个列表290个关键字).

public List<string> Keyword_Search(HTMLNode nSearch)    {        var wordFound = new List<string>();        foreach (string currWord in _keywordList)        {            bool isMatch = Regex.IsMatch(nSearch.INNERHTML,"\b" + @currWord + "\b",RegexOptions.IgnoreCase);            if (isMatch)            {                wordFound.Add(currWord);            }        }        return wordFound;    }

反正我有没有提高这个功能的效率?

另一件可能减慢速度的事情是我使用HTML Agility Pack来浏览一些节点并拉出正文(nSearch.INNERHTML). _keywordList是List项,而不是数组.

解决方法 我假设COM调用nSearch.INNERHTML很慢,你重复调用你正在检查的每个单词.您可以简单地缓存调用的结果:
public List<string> Keyword_Search(HTMLNode nSearch){    var wordFound = new List<string>();    // cache inner HTML    string INNERHTML = nSearch.INNERHTML;    foreach (string currWord in _keywordList)    {        bool isMatch = Regex.IsMatch(INNERHTML,RegexOptions.IgnoreCase);        if (isMatch)        {            wordFound.Add(currWord);        }    }    return wordFound;}

另一个优化是Jeff Yates建议的优化.例如.通过使用单一模式:

string pattern = @"(\b(?:" + string.Join("|",_keywordList) + @")\b)";
总结

以上是内存溢出为你收集整理的c# – 提高正则表达式效率全部内容,希望文章能够帮你解决c# – 提高正则表达式效率所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存