Я создаю приложение, которое будет принимать URL-адрес в качестве входного, извлекать html-содержимое страницы из Интернета и извлекать все, что не содержится в теге .Другими словами, текстовое содержание страницы, как видно посетителю этой страницы.Это включает в себя «маскирование» всего, что заключено в <script></script>
, <style></style>
и <!-- -->
, так как эти части содержат текст, который не заключен в тег (но лучше оставить его в покое).
Я построилthis regex:
(?:<(?P<tag>script|style)[\s\S]*?</(?P=tag)>)|(?:<!--[\s\S]*?-->)|(?:<[\s\S]*?>)
Он правильно выбирает все содержимое, которое я хочу игнорировать, и оставляет только текстовое содержимое страницы.Однако это означает, что то, что я хочу извлечь, не будет отображаться в коллекции совпадений (я использую VB.Net в Visual Studio 2010).
Есть ли способ "инвертировать" сопоставлениевесь документ, подобный этому, чтобы я мог получить совпадения для всех текстовых строк, которые пропущены при сопоставлении в приведенном выше регулярном выражении?
До сих пор я добавил еще одну альтернативу в конце,это выбирает «любую последовательность, которая не содержит <или>», что означает остаток текста.Я назвал этот последний бит в группе захвата, и когда я перебираю совпадения, я проверяю наличие текста в «текстовой» группе.Это работает, но мне было интересно, если бы было возможно сделать все это через регулярное выражение и просто в конечном итоге с совпадениями в простом тексте.
Это должно работать в общем, без знания каких-либоконкретные теги в HTML.Предполагается извлечь весь текст.Кроме того, мне нужно сохранить исходный html, чтобы на странице были сохранены все ссылки и скрипты - мне нужно только иметь возможность извлекать текст, чтобы я мог выполнять поиск и замены внутри него, не опасаясь «переименования» любых тегов, атрибутовили переменные сценария и т. д. (поэтому я не могу просто выполнить «замену ничем» для всех совпадений, которые я получаю, потому что, несмотря на то, что после этого у меня остается то, что мне нужно, это затрудняет повторную вставку этого в правильные местаполностью функциональный документ).
Я хочу знать, возможно ли это вообще с помощью регулярных выражений (и я знаю о HTML Agility Pack и XPath, но не чувствую).
Любые предложения?
Обновление: Вот решение (на основе регулярных выражений), в котором я остановился: http://www.martinwardener.com/regex/,, реализованное в демонстрационном веб-приложении, которое будет показывать обе активные строки регулярных выражений вдольс тестовым движком, который позволяет вам выполнять анализ на любой html-странице в Интернете, давая вам время разбора и извлеченные результаты (для отдельных частей ссылки, URL-адреса и текста)в конечном итоге - а также представления, где все совпадения с регулярными выражениями выделены на месте в полном HTML-документе).