разобрать строку с регулярным выражением - PullRequest
2 голосов
/ 10 августа 2010

Я пытаюсь найти в строке адреса электронной почты, но мое регулярное выражение не работает, если строка содержит символы, отличные от адреса электронной почты.Это значит, что если я попробую маленькую строку, например "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());

Пожалуйста, дайте мне знать, что я делаю не так.

Спасибо.

С уважением,

Ответы [ 5 ]

5 голосов
/ 10 августа 2010

Удалите ^ и $ из начала и конца.Они означают «Начало строки» и «Конец строки» соответственно.

5 голосов
/ 10 августа 2010

^ и $ означают (соответственно) начало и конец введенного текста (или строки в многострочном режиме) - обычно используются для проверки того, что весь текст (или строка) соответствует шаблону. Так что, если ты не хочешь этого, убери их.

2 голосов
/ 10 августа 2010

Вы изучили, как использовать регулярные выражения, или вам действительно нужно разобрать адреса электронной почты?

Есть объект, специально разработанный для этого MailAddress

Вот документация MSDN: http://msdn.microsoft.com/en-us/library/591bk9e8.aspx

Когда вы инициализируете его строкой, содержащей почтовый адрес, который имеет неправильный формат, будет выброшено FormatException.

Удачи!

1 голос
/ 10 августа 2010

Первая очевидная проблема: ваше выражение соответствует только адресам электронной почты в начале строки. Вам нужно сбросить ^ в начале.

^ соответствует началу строки.

0 голосов
/ 10 августа 2010

Регулярное выражение верно. адреса электронной почты не содержат пробелов.

Вы можете использовать экранирование как \ w в своем регулярном выражении для сопоставления пробелов, или вы можете использовать str.Trim (), чтобы исправить вашу строку перед попыткой сопоставления с ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...