我想从电子邮件地址中提取别名部分。例如,如果我有“ name+alias1+alias2+alias3@email.com”,我希望它返回一个子地址列表,在本例中为alias1,alias2,alias3。
我有提取第一个别名的代码,如下所示:
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
if (!username.Contains("+")) return;
var split = username.Split('+').ToList();
var name = split[0];
var alias = split[1];
但这不适用于多个地址。我也宁愿不使用正则表达式(由于“现在您有两个问题”)。
答案 0 :(得分:1)
诀窍是使用Linq获取除第一个别名之外的所有别名,该别名与名称相对应:
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
if (!username.Contains("+")) return;
var split = username.Split('+').ToList();
var name = split[0];
var alias = split.Skip(1);
答案 1 :(得分:1)
如果要大量重复使用它,建议您编写一种扩展方法来检索别名列表。 由于@mnieto已经发布了带有split的解决方案,因此在这里我想使用Regex。
public static class MailAddressExtension
{
private static Regex AliasRegex = new Regex(@"\+([A-Za-z0-9]+)");
public static List<string> Alias(this MailAddress mail)
{
return AliasRegex.Matches(mail.User).Select(a => a.Groups[1].Value).ToList();
}
}
然后在您的代码中,您就可以打字
var addr = new MailAddress("name+alias@email.com");
var username = addr.User;
var domain = addr.Host;
var alias = addr.Alias();