我的正则表达式仍在捕获未捕获的组

时间:2016-09-23 14:52:25

标签: c# regex

我有以下正则表达式:

(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\<\'\"])?(.*?)(?:[\>\'\"])?$)

以下文本块:

To: <test@somedomain.com>

它捕获了它应该在这里发送的电子邮件:https://regex101.com/r/gQ1bV5/1

但是当我在我的代码中实现它时,它仍会在电子邮件地址的末尾捕获>等。 (返回test@somedomain.com>

public string FindRealEmail()
{
    var filterRegex = new Regex("(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\\<\\\'\\\"])?(.*?)(?:[\\>\\\'\\\"])?$)", RegexOptions.Multiline);
    var email = (filterRegex.IsMatch(Body) ? filterRegex.Match(Body).Groups[1].Value : EmailAddress).Replace("\r", "");
    return email;
}

1 个答案:

答案 0 :(得分:3)

这个问题并不是因为最后一个非捕获组,而是行结尾。如果您在最后处理换行符,则&gt;未被捕获。

(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\<\'\"])?(.*?)(?:[\>\'\"])?\r?$)

如果您不需要捕获某些部分,则可以省略括号。您不必逃避<'&amp; "个字符。

^(?:X-Rcpt-To|X-MDRcpt-To|To): [<'"]?(.*?)[>'"]?\r?$