Что лучше для разбора: регулярные выражения или linq? - PullRequest
2 голосов
/ 10 октября 2011

Я анализирую веб-страницу на Windows Phone 7, и мне нужно знать, как лучше это сделать. Наиболее важным является производительность. Я видел в примере с imdb, что автор использует регулярное выражение , но я не уверен, будет ли лучше, если я использую Html Agility Pack и Linq.

P.s .: Я должен разобрать сайт, и это не мой сайт.

Ответы [ 2 ]

7 голосов
/ 10 октября 2011

Вам будет лучше всего пользоваться Html Agility Pack и Linq.

Синтаксический анализ HTML с помощью RegEx весьма ненадежен.

0 голосов
/ 11 октября 2011

Случайно я работаю над подобной темой. Я не говорю вам никаких авторитетных заявлений, так как это слишком рано. Для начала я взял 3 двигателя:

Конечно, вариантов гораздо больше (даже я однажды написал простую программу просмотра html для Palm OS), но это, похоже, хорошее начало.

Majestic не предлагал Html-> преобразование текста, просто пример кода, как пройти через строку html. Для начала я реализовал тривиальное преобразование:

  • Написать все текстовые узлы
  • Преобразование

    в "\ n \ n" и
    в "/ n"

  • Игнорирование всего остального

Затем я собрал образец из 50+ HTML-файлов и преобразовал их, используя все 3 метода. Я должен сказать, что я не был доволен ни одним из методов. Два общих замечания:

  • Результаты Majestic и Agility были удивительно похожи
  • Метод регулярных выражений был на порядок медленнее.

Итак, я посмотрел код Regex и обнаружил бессмысленный цикл внизу. После простой оптимизации метод Regex стал только на ~ 25% медленнее. Учитывая, что он выполняет более 30 сложных замен Regex, я посчитал это хорошим результатом.

Затем я написал тестовый html-файл, содержащий все общие html-тэги и немного больше. Как и прежде, Majestic и Agility действовали аналогично.

  • Все двигатели в порядке: h1, p, теги написаны как текст
  • Все двигатели вышли из строя: h2 +, hr, b
  • br: регулярное выражение не удалось, Majestic в порядке
  • Списки: регулярное выражение в порядке, Majestic не удалось
  • Простая таблица 2x2: регулярное выражение в норме, Majestic не удалось

Есть еще много чего проверить. Например кодировка.

В данный момент я бы только сказал, что Regex кажется лучшей альтернативой. Однако ни один из упомянутых двигателей не работает удовлетворительно. Положительным моментом является то, что настроить эти движки (особенно Majestic и Regex) легко. Может быть, то же самое относится и к Agility, однако я недостаточно глубоко изучил пакет, чтобы сказать это.

...