使用RegEx类从电子邮件主题中删除“RE:”(和类似名称)

tmb3ates  于 2023-04-22  发布在  其他
关注(0)|答案(3)|浏览(132)

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

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

在我看来,我们应该找到字符串的开头,然后在0到3个字符之间加上一个冒号和一个空格。
可是电脑不同意,我也没办法了。我错过了什么简单的事情?!

6rvt4ljy

6rvt4ljy1#

删除逗号后的空格:

@"^.{0,3}:\s"
vyswwuz2

vyswwuz22#

如果您担心多个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;
}
ercv8c1e

ercv8c1e3#

你可以用下面的正则表达式删除所有类型的东西,比如refwd

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

上面的正则表达式将用于RegexOptions.IgnoreCase
它甚至可以处理多个回复和转发,例如:

re: re : RE: fwd  : re: fwd:  About meeting tomorrow

相关问题