我正在尝试搜索字符串中的电子邮件地址,但是当字符串包含除电子邮件之外的其他字符时,我的正则表达式不起作用。意思是,如果我尝试像“me@email.com”这样的小字符串,正则表达式会找到一个匹配项。如果我在字符串中插入一个空格,例如:“me@mail.com”,则正则表达式找不到电子邮件匹配项。
这是我的代码(正则表达式模式来自网络):
string emailpattern = @"^(([^<>()[\]\\.,;:\s@\""]+"
+ @"(\.[^<>()[\]\\.,;:\s@\""]+)*)|(\"".+\""))@"
+ @"((\[[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 = @" me@mail.com";
MatchCollection mcolResults = rEmail.Matches(str);
MessageBox.Show(mcolResults.Count.ToString());
请让我知道我做错了什么。
谢谢。
致以最诚挚的问候,
答案 0 :(得分:5)
^
和$
分别表示输入文本的开头和结尾(或多行模式中的行) - 通常用于检查整个文本(或行)与模式匹配。所以,如果你不想那样,就把它们带走。
答案 1 :(得分:5)
从开头和结尾删除^和$。它们分别表示“字符串的开头”和“字符串的结尾”。
答案 2 :(得分:2)
您是否了解如何使用正则表达式或实际需要解析电子邮件地址?
有一个对象专门设计为MailAddress
以下是MSDN文档:http://msdn.microsoft.com/en-us/library/591bk9e8.aspx
使用包含格式正确的邮件地址的字符串对其进行初始化时,将抛出FormatException
。
答案 3 :(得分:1)
第一个明显的问题:您的表达式仅匹配字符串开头的电子邮件地址。 你需要在开始时删除^。
^匹配字符串的开头。
答案 4 :(得分:0)
正则表达式是正确的。电子邮件地址不包含空格。
你可以在正则表达式中使用\ w之类的转义符来匹配空格,或者你可以在尝试匹配它之前使用str.Trim()来修复你的字符串。