我需要从主题中删除领先的RE:,今天绝对不是我的一天,因为我没有得到匹配,显然我错过了一些简单的东西。我的前任非常清楚地表明子字符串方法是有效的,但我不能忍受糟糕的技术。:)
//emailSubject = emailSubject.Substring(4);
emailSubject = Regex.Replace(emailSubject, @"^.{0, 3}:s", "");
在我看来,我们应该找到字符串的开头,并在0到3个字符之间,后面跟着一个冒号和一个空格。然后,这些垃圾应该被清除。
但是电脑不同意,我也无计可施。我错过了什么简单的事!去掉逗号后的空格:
@"^.{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;
}
您可以使用以下正则表达式删除所有类型的内容,例如re
和fwd
:
^(?>(?:re|fwd) *: *)*
上面的正则表达式用于RegexOptions.IgnoreCase
。
它甚至可以处理多个回复和转发,例如:
<>之前回复:回复:转发:转发:关于明天的会议