C # RegEx на StreamReader не будет возвращать совпадения - PullRequest
0 голосов
/ 08 августа 2010

Я пишу себе простое приложение для очистки экрана, чтобы поиграть с библиотекой HTMLAgilityPack, и после того, как я заставил его работать с несколькими различными типами HtmlNodes, я решил, что мне будет интересно, и я добавлю Regex для адресов электронной почты какЧто ж.Единственная проблема заключается в том, что приложение никогда не находит совпадений или, возможно, оно не возвращается должным образом.Это происходит даже на сайтах, о которых известно, что они содержат адреса электронной почты.Кто-нибудь может заметить, что я здесь делаю неправильно?

      string url = String.Format("http://{0}", mainForm.Target);
      string reg = "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,4}\b";
      try
            {
                WebClient wClient = new WebClient();
                Stream data = wClient.OpenRead(url);
                StreamReader read = new StreamReader(data);
                MatchCollection matches = Regex.Matches(read.ReadToEnd(), reg, RegexOptions.IgnoreCase|RegexOptions.Multiline);
                foreach (Match match in matches)
                {
                    textBox1.AppendText(match.ToString() + Environment.NewLine);
                }

Ответы [ 2 ]

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

Использовать необработанные строки:

string reg = @"\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b";

Без этого \b становится пробелом.Кроме того, ваш последний период должен быть \., поэтому он соответствует только буквальному периоду.

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

Проверьте строку, возвращаемую read.ReadToEnd (), и посмотрите, сможете ли вы найти адреса электронной почты в этой строке с помощью вашего регулярного выражения. Я полагаю, что ваша проблема не имеет ничего общего с StreamReader.

...