2010-08-10 32 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