2010-08-08 3 views
0

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

 string url = String.Format("http://{0}", mainForm.Target); 
     string reg = "\b[A-Z0-9._%+-][email protected][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

Используйте сырые строки:

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

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

+0

+1 - Я думаю, что официальным термином является «стенографический строковый литерал». –

+0

Sweet, теперь он отображает совпадения :) Как бы я хотел убедиться, что он не отображает дубликаты? – Stev0

+0

@Stev, вы имеете в виду, если один и тот же адрес электронной почты появляется более одного раза в тексте? Вы можете добавить каждое соответствие к ['HashSet'] (http://msdn.microsoft.com/en-us/library/bb359438.aspx), а затем добавить его, если' Add' возвращает true (он еще не был там). –

0

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

Смежные вопросы