现在我有正则表达式\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#
注意,我查看了这个How to match a comma separated list of emails with regex?
但我不确定如何修改^([\w+-.%]+@[\w-.]+\.[A-Za-z]{2,4},?)+$
以满足我的需求
目前我有
(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*[\s?[,|\||;|]\s?]?)+$
答案 0 :(得分: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的更新,这将捕获正则表达式不会出现的所有边缘情况,甚至会随着时间的推移而变得更好。它还简化了分隔符和空格的处理。
答案 1 :(得分:0)
尝试这样的事情(;|\||,)
我推荐使用工具RegExBuddy,你可以尝试使用这个简单的模式,这对我来说总是一个很好的帮助,以获得正确的模式!有一个试用版!
答案 2 :(得分:0)
我想出了这个:
(\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*(\s?[,|\||;|]\s?)?)+$
我认为这可以解决我的问题,有什么建议吗?
答案 3 :(得分:0)
我会使用lookbehind和lookahead:
(?<=\s|\||;|,|^)[\w.+-]+@(?:[\w-]+\.){1,2}(?:[a-z]{2,6})(?:\.[a-z]{2,6})?(?=\s|\||;|,|$)
您可以测试此正则表达式here。