2012-05-16 2 views
0

Я играю с веб-сайтами и регулярными выражениями на C#. У меня есть эта ситуация: Регулярные выражения: Multiline-issue with html

   <a href="path/to/image"> 
    <img src="thumbnail"></a> 

Это изложением как мое приложение получает содержание данного веб-сайта. Вкладки и разрывы не одинаковы для каждой строки.

Я использую gskinner проверить регулярное выражение (http://gskinner.com/RegExr/), и я создал это регулярное выражение:

  (?i)<a([^>]+)>\W.*</a> 

Флаги: Многострочный

Gskinner показывает, что шаблон верно. Но когда я вставляю C# (regEx.Matches (...)), он больше не может найти совпадения.

Кто-нибудь знает, как это сделать?

Благодаря

+5

Do не к нему с Regex. См. Например, http://stackoverflow.com/q/590747/390819. Одним из правильных инструментов для анализа HTML является http://htmlagilitypack.codeplex.com/ – GolfWolf

ответ

0

с помощью HtmlAgilityPack и ваша строка образца

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
doc.LoadHtml(html); 

-

var href = doc.DocumentNode 
    .Descendants("a") 
    .Select(n => n.Attributes["href"].Value) 
    .FirstOrDefault(); 

var src = doc.DocumentNode 
    .Descendants("img") 
    .Select(n => n.Attributes["src"].Value) 
    .FirstOrDefault(); 
+0

+1 для обеспечения альтернативы. – stema

+0

Хорошо, круто. Я пробовал HtmlAgilityPack, но когда я заменяю FirstOrDefault() на ToList(), я получаю ссылку на объект, не задающую исключение. Мне нужны все ссылки на странице, а не одна. Как это сделать? –

+0

Вы можете добавить '.Where (n => n.Attributes [" someattr "]! = Null)' before 'Select', чтобы убедиться, что атрибут не равен –

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