如何从文本中分割电子邮件地址?

时间:2010-12-10 12:15:34

标签: c#

在文本框中,我保留了电子邮件地址。 例如

Text_box.value="a@hotmail.com,b@hotmail.com,c@hotmail.com"

如何拆分所有电子邮件地址?我应该使用正则表达式吗?

最后,我想保留用户正确编码的任何电子邮件地址

6 个答案:

答案 0 :(得分:3)

string[] s=Text_box.Text.split(',');
Regex R=new Regex("\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b");
var temp=from t in s  where R.IsMatch(t) select t;
List<string> final=new List<string>();
final.addrange(temp);

使用此

答案 1 :(得分:1)

string[] emails = list.Split(new char[]{','});

答案 2 :(得分:0)

"a@hotmail.com,b@hotmail.com,c@hotmail.com".Split(',');

答案 3 :(得分:0)

分割字符串有两种方法。

1)每个字符串类型对象都有一个名为 Split()的方法,它接受字符数组或字符串数​​组。此数组的元素用于拆分给定的字符串。

 string[] parts  = Text_box.value.Split(new char[] {','});

2)虽然在这个例子中string.Split()就足够了,但我们可以使用正则表达式来实现相同的结果。要拆分的正则表达式是:

string[] parts = Regex.Split(Text_box.value,@",");

答案 4 :(得分:0)

这只会打印匹配的电子邮件地址,而不会打印不匹配的电子邮件地址。

private void Match()
{
        Regex validationExpression = new Regex(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");  
        string text = "whatever@gmail;a@hotmail.com,gmail@sync,b@hotmail.com,c@hotmail.com,what,dhinesh@c";  
        MatchCollection matchCollection = validationExpression.Matches(text);  
        foreach (var matchedEmailAddress in matchCollection)  
        {  
            Console.WriteLine(matchedEmailAddress.ToString());  
        }  
        Console.ReadLine();  
}

这将打印

a@hotmail.com
b@hotmail.com
c@hotmail.com

正则表达式无法匹配其他内容。

答案 5 :(得分:0)

您必须使用正确的正则表达式来查找所有形式的电子邮件地址(使用拉丁字母)。 检查维基百科(http://en.wikipedia.org/wiki/Email_address)以获取电子邮件地址的正确语法(更简单的方法)或RFC5322,5321(更难理解)。

我正在使用它:

(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|""(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*"")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])