删除“RE:“(以及类似的)从电子邮件主题使用RegEx类

本文关键字:电子邮件 RegEx RE 删除 | 更新日期: 2023-09-27 18:12:21

我需要从主题中删除领先的RE:,今天绝对不是我的一天,因为我没有得到匹配,显然我错过了一些简单的东西。我的前任非常清楚地表明子字符串方法是有效的,但我不能忍受糟糕的技术。:)

//emailSubject = emailSubject.Substring(4);
emailSubject = Regex.Replace(emailSubject, @"^.{0, 3}:'s", "");

在我看来,我们应该找到字符串的开头,并在0到3个字符之间,后面跟着一个冒号和一个空格。然后,这些垃圾应该被清除。

但是电脑不同意,我也无计可施。我错过了什么简单的事!

删除“RE:“(以及类似的)从电子邮件主题使用RegEx类

去掉逗号后的空格:

@"^.{0,3}:'s"

如果您关心多个FWD链(和类似链)和多个客户端语言:

public static string ClearSubject(string originalSubject)
{
    Regex regex = new Regex(@"^(['['(] *)?(RE?S?|FYI|RIF|I|FS|VB|RV|ENC|ODP|PD|YNT|ILT|SV|VS|VL|AW|WG|ΑΠ|ΣΧΕΤ|ΠΡΘ|תגובה|הועבר|主题|转发|FWD?) *([-:;)']][ :;'])-]*|$)|']+ *$", RegexOptions.IgnoreCase);
    originalSubject = regex.Replace(originalSubject, string.Empty);
    if (regex.IsMatch(originalSubject))
    {
        return ClearSubject(originalSubject);
    }
    return originalSubject;
}

您可以使用以下正则表达式删除所有类型的内容,例如refwd:

^(?>(?:re|fwd) *: *)*

上面的正则表达式用于RegexOptions.IgnoreCase

它甚至可以处理多个回复和转发,例如:

<>之前回复:回复:转发:转发:关于明天的会议