我有以下正则表达式:
(?:^(?: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;
}
答案 0 :(得分:3)
这个问题并不是因为最后一个非捕获组,而是行结尾。如果您在最后处理换行符,则&gt;未被捕获。
(?:^(?:X-Rcpt-To|X-MDRcpt-To|To): (?:[\<\'\"])?(.*?)(?:[\>\'\"])?\r?$)
如果您不需要捕获某些部分,则可以省略括号。您不必逃避<
,'
&amp; "
个字符。
^(?:X-Rcpt-To|X-MDRcpt-To|To): [<'"]?(.*?)[>'"]?\r?$