Хобрук: Ваш путь к мастерству в программировании

Самый эффективный способ анализа порядка тегов заголовков HTML

Я пытаюсь определить, не соблюдает ли данная страница порядок тегов заголовка (h1, h2 и т. д.). На самом деле, я хочу иметь возможность анализировать кучу страниц и чтобы он возвращал мне каждую страницу, которая НЕ соответствует порядку заголовков.

Моя первая цель состояла в том, чтобы узнать, следует ли сразу за a что-то еще, кроме h2. Чего я достиг с помощью следующего шаблона

(?<=<h1[^<>]*>.+?)(?<!<h1[^<>]*>.+?<h2[^<>]*>.+?)<h[3-6][^<>]*>

У меня работает предыдущее регулярное выражение, хотя оно не очень эффективно и далеко от совершенства.

Итак, в первую очередь я хотел бы получить некоторую помощь в улучшении этого шаблона и, если возможно, объяснение, сравнивающее мой старый шаблон и почему он настолько неэффективен. И во-вторых, я хотел бы обновить/изменить шаблон для достижения первоначальной цели, которая состоит в том, чтобы убедиться, что порядок тегов заголовка документа соблюдается.

ПРИМЕЧАНИЕ. Я использую RegexHero для сравнительного анализа.

Я знаю, что регулярные выражения обычно не являются лучшей практикой для синтаксического анализа HTML, но это скорее упражнение для меня, чтобы пользователь мог более эффективно искать, атомная группировка и тому подобное, спасибо за понимание.

Мы могли бы использовать следующий шаблон и следующий текст в качестве образца

Шаблон:

 (?<=lol1.+?)(?<!lol1.+?lol2.+?)lol[3-6]

Текст:

лол1 бла лол3 бла лол2 бла лол4


  • Если бы мне давали пять центов каждый раз, когда я вижу, как кто-то пытается разобрать html или xml с помощью Regex... 13.02.2013
  • @YuriyFaktorovich смотрите обновление 13.02.2013
  • Хм, не могли бы вы отредактировать заголовок, чтобы сделать его независимым от HTML? 13.02.2013
  • @bergi, если вы считаете это уместным, пожалуйста, продолжайте. 13.02.2013

Ответы:


1

Что вы могли бы сделать, так это извлечь последовательность заголовков в массив, которым затем можно было бы манипулировать. Например:

<h1><h3></h3></h1><h2><h3><h4></h4></h3></h2>

Переведет на:

[1,3,-3,-1,2,3,4,-4,-3,-2]

Затем вы можете использовать простые операции для проверки вашей структуры (например, переход от одного значения к другому составляет +/-1).

Регулярное выражение:

/(<h\d|<\/h\d)/g
13.02.2013
  • ваш ответ действительно действителен, но он противоречит истинной цели моего вопроса, которая состоит в том, чтобы лучше разобраться в поиске и группировке 13.02.2013
  • Новые материалы

    Как я могу подписаться на тему изображений в ROS Matlab и получить изображение RGB?
    Привет, Пожалуйста, как я могу извлечь изображение из сообщения ROS Image, за которым следует imshow? Я уже подписался на правильную тему, но message.getData() дает мне объект..

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..