2010-08-10 34 views
2

我想搜索一个字符串的电子邮件地址,但我的正则表达式不起作用,当字符串包含除电子邮件以外的其他字符。意思是,如果我尝试像“[email protected]”这样的小字符串,则正则表达式会找到匹配项。如果我在字符串中插入空格,如:“[email protected]”,则正则表达式不会找到电子邮件匹配项。与正则表达式解析字符串

这里是我的代码(正则表达式模式是从网上):

  string emailpattern = @"^(([^<>()[\]\\.,;:\[email protected]\""]+" 

        + @"(\.[^<>()[\]\\.,;:\[email protected]\""]+)*)|(\"".+\""))@" 

        + @"((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 

        + @"\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+" 

        + @"[a-zA-Z]{2,}))$"; 
      Regex rEmail = new Regex(emailpattern); 
      string str = @" [email protected]"; 
      MatchCollection mcolResults = rEmail.Matches(str); 
      MessageBox.Show(mcolResults.Count.ToString()); 

请让我知道我做错了。

谢谢。

此致

+0

看看这里更好的电子邮件正则表达式:http://www.regular-expressions.info/email.html – jtbandes 2010-08-10 05:31:06

回答

5

^$平均值(分别)的输入文本的(在多行模式或线)的开始和结束 - 一般用于检查整个文本(或线)匹配模式。所以如果你不想要那个,就把它们带走。

+1

你很快的人。 +1。 – David 2010-08-10 05:30:46

+0

非常感谢您的帮助,我现在看到错误在哪里。当我回家时,我会尝试你的建议。下一次,我会学会在问之前制作一个正则表达式! – 2010-08-10 10:55:11

5

从开始和结束中删除^和$。它们分别表示“字符串开始”和“字符串结束”。

0

正则表达式是正确的。电子邮件地址不包含空格。

你可以在正则表达式中使用\ w这样的转义符来匹配空格,或者你可以在尝试匹配它之前使用str.Trim()来修正你的字符串。

+0

感谢您的建议;但是我不能使用trim() - 字符串是动态的,如果它例如是“mmm [email protected]”,如果我删除空格,正则表达式将匹配:[email protected] – 2010-08-10 10:52:58

+0

@Andrei:Trim不删除所有空格,只在字符串的开始和结尾处留出空白。 – 2010-08-10 11:12:12

1

第一个明显的问题:您的表达式只匹配字符串开头的电子邮件地址。 您需要在开始时删除^。

^匹配字符串的开头。

2

你学会了如何使用正则表达式,或者你实际上需要解析邮件地址吗?

有是被特别设计来做到这一点MailAddress

这里是MSDN文档对象:http://msdn.microsoft.com/en-us/library/591bk9e8.aspx

当你持有一个邮件地址不正确格式的字符串初始化,FormatException将被抛出。

祝你好运!

+0

+1即使OP不使用这个答案,MailAddress类对我来说是一个很好的选择。谢谢! – 2010-08-10 11:14:02