繁体   English   中英

尝试使用.NET正则表达式从电子邮件中提取信息

[英]Trying to extract information from an email with .NET regex

我正在尝试在股票促销“ tout”电子邮件的“免责声明”区域(部分垃圾邮件)中提取一些信息。

通常,兜售者将对以下内容免责:

XYZ公司已获得为期两周的ABC股票促销的五万美元补偿。

我有一个正则表达式适用于这种情况(按目前的情况来看可能不是最有效的),并且它似乎适用于大多数情况。 但是,当免责声明使用网址引用促销公司(即www.companyxyz.com而不是XYZ公司)时,我的正则表达式会捕获“ .com”,而我尝试捕获的其余短语-但是而不是“ www.companyxyz”部分。

这是我的正则表达式方法:

    public string ExtractCompensationLine(string message)
    {
        string compensationLine = string.Empty;
        string messageLine = Regex.Replace(message, "[\n\r\t]", " ");
        string leftPrefix = @"\.((\w|\s|\d|\,)+";
        string rightPrefix = @"(\w|\s|\d|\,)+\.)";

        string[] phrases = 
        {
            @"has been compensated",
            @"we were also paid",
            @"has been previously compensated",
            @"currently being compensated",
            @"the company has compensated",
            @"has agreed to be compensated",
            @"have been compensated up to",
            @"dollars from a third party",
            @"the company will compensate us"
        };

        foreach (string phrase in phrases)
        {
            string pattern = leftPrefix + phrase + rightPrefix;
            Regex compensationRegex = new Regex(pattern, RegexOptions.IgnoreCase);
            Match match = compensationRegex.Match(messageLine);

            if (match.Success)
            {
                compensationLine += match.Groups[1].Value;
            }
        }

        return compensationLine;
    }

因此,正则表达式从句子的第一个单词捕获整个短语(通过查找句子的前一个句号,直到句子的最后一个句号。但是这些网址对我的正则表达式不利。

如果我正确地理解了您的问题,给定一个包含给定短语之一的句子,则您希望从该句子的开头到其结尾或行尾。 您面临的挑战是找到要匹配的句子之前的句子结尾。 因此,您需要匹配“。”(句号后跟空白)。然后匹配其余部分。

我不明白为什么您会使用“(\\ w | \\ s | \\ d | \\,)”而不是“。”。 它不会给出我上面描述的结果,但是我将保持原样,仅关注您描述的问题。

所以试试这个:

leftPrefix = @"(\.*\s+)*?((\w|\d|\,)+";

(。* \\ s +)*:匹配任何字符,后跟一个句点,后跟空白。

由于我使用括号将这个新的子表达式分组,因此您将拥有一个新的捕获组,这意味着您需要使用Match对象的Captures集合,而不是Value。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM