Регулярное выражение для получения HTML без комментариев - PullRequest
1 голос
/ 12 ноября 2009

Мне нужно выполнить задачу, которая заключается в том, чтобы вывести html с веб-страницы. На веб-странице есть комментарии, и мне нужно получить HTML из комментариев. Я надеюсь, что пример ниже может помочь. Мне нужно, чтобы это было сделано в C #.

<!--get html from here-->
<div><p>some text in a tag</p></div>
<!--get html from here-->

Я хочу вернуть

<div><p>some text in a tag</p></div>

Как бы я это сделал ??

Ответы [ 4 ]

2 голосов
/ 12 ноября 2009

регулярные выражения не идеальны для HTML. Если вы действительно хотите обрабатывать HTML во всей его красе, рассмотрите HtmlAgilityPack, как обсуждалось в этом вопросе. Ищем синтаксический анализатор C # HTML

Самое простое, что могло бы сработать:

string pageBuffer=...;
string wrapping="<!--get html from here-->";
int firstHitIndex=pageBuffer.IndexOf(wrapping) + wrapping.Length;
return pageBuffer.Substring( firstHitIndex, pageBuffer.IndexOf( wrapping, firstHitIndex) - firstHitIndex));

(с проверкой ошибок на наличие обоих маркеров)

В зависимости от вашего контекста, WatiN может быть полезен (не если вы находитесь на сервере, но если вы на стороне клиента и делаете что-то более интересное, что может быть полезным при полном разборе HTML).

2 голосов
/ 12 ноября 2009

Если все экземпляры отформатированы одинаково, выражение будет выглядеть следующим образом

<!--[^(-->)]*-->(.*)<!--[^(-->)]*-->

будет получать все между двумя комментариями. Если ваш текст «получить html from here» в ваших комментариях четко определен, вы можете указать более точно:

<!--get html from here-->(.*)<!--get html from here-->

Когда вы запускаете RegEx по строке, коллекция Groups будет содержать HTML между комментариями.

2 голосов
/ 12 ноября 2009

Как насчет нахождения индекса первого разделителя, индекса второго разделителя и «обрезки» строки между ними? Звучит намного проще, может быть так же эффективно, как.

0 голосов
/ 12 октября 2012

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

Я попробовал с ним, и он отлично работал для однострочных, многострочных, комментариев с символом Unicode и символами.

<!--[\u0000-\u2C7F]*?-->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...