目前,我正在使用以下正则表达式从 Outlook HTML 邮件项目中删除第一个对话项目:
.*?>(([^:]+?):<.*?\2):
为了删除第一个对话项,我只需将组 1 的第一次出现替换为组 2 的值。在 .NET 中看起来有点像这样:
private static readonly Regex LAST_CONVERSATION_REPLACE_PATTERN = new Regex(@".*?>(([^:]+?):<.*?\2):", RegexOptions.Compiled);
// ...
MatchCollection matches = LAST_CONVERSATION_REPLACE_PATTERN.Matches(htmlMessageBody);
if (matches.Count > 0)
{
Match match = matches[0];
if (match.Groups.Count > 2)
{
return htmlMessageBody.ReplaceFirst(match.Groups[1].ToString(), match.Groups[2].ToString());
}
}
ReplaceFirst
是我自己的字符串扩展方法。不过,这次的表现有点让人失望。虽然 Regex Coach 可以在一微秒内将其应用于大型邮件项目,但在 Outlook 加载项中最多需要 10 秒。
如果我用这个明确的替代方案替换模式,性能会显着提高:
.*?>(From:<.*?From):
使用该正则表达式,只需不到一秒钟的时间就可以得到我想要的。但是,这将是特定于语言的,因此我更喜欢以前的变体。有什么方法可以加快 .NET 的速度吗?或者是否有第三方正则表达式库可以在这个库上表现更好?
感谢您的任何建议和最好的问候
帕斯卡