0

现在我有正则表达式\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*来匹配一个电子邮件地址,这很好。

我已经尝试了各种用于 csv 单元格匹配的方法,但我似乎无法让它们为此工作。

我需要的是与上面的正则表达式匹配的东西,但是之间有一个分隔符,有三个不同的分隔符'|' ',' ';',例如我想匹配

example@example.com

example@example.com|example@example.com|example@example.com

example@example.com,example@example.com,example@example.com

example@example.com;example@example.com;example@example.com

我也不关心空格,所以它需要考虑他们在其中添加额外的空格,同时仍然考虑以上内容,例如:

example@example.com | example@example.com|example@example.com

它还需要能够使用分隔符的组合

example@example.com,example@example.com;example@example.com|example@example.com

我正在这样做c#

请注意,我已经查看了如何将逗号分隔的电子邮件列表与正则表达式匹配?

但我不确定如何修改^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},?)+$以满足我的需求

目前我有

(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*[\s?[,|\||;|]\s?]?)+$
4

4 回答 4

1

我会使用String.Split()MailAddress构造函数的组合。像这样的东西:

public bool ValidAddressText(string input)
{
    string[] addresses = input.Split(new Char[] { ',', ';', '|' });
    foreach (string address in addresses)
    {
        address = address.Trim();
        try
        {
            if (address == "")
            {
                return false;
            }

            new MailAddress(address);
        }
        catch(FormatException)
        {
            return false;
        }
    }

    return true;
}

随着 .NET Framework 的更新,这将捕获正则表达式不会甚至随着时间的推移变得更好的所有边缘情况。它还简化了分隔符和空格的处理。

于 2013-09-26T23:06:32.667 回答
0

尝试这样的事情(;|\||,)

我推荐工具 RegExBuddy,你可以用它来尝试你的模式,这对我来说总是一个很好的帮助,以获得正确的模式!有试用版!

于 2013-09-26T22:27:38.133 回答
0

我想出了这个:

(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\s?[,|\||;|]\s?)?)+$

我相信它可以解决我的问题,有什么建议吗?

于 2013-09-26T22:28:18.030 回答
0

我会为此使用lookbehind和lookahead:

(?<=\s|\||;|,|^)[\w.+-]+@(?:[\w-]+\.){1,2}(?:[a-z]{2,6})(?:\.[a-z]{2,6})?(?=\s|\||;|,|$)

你可以在这里测试这个正则表达式。

于 2013-09-26T22:50:16.980 回答