Регулярное выражение: Извлечение читаемого (не кодового) текста и URL-адресов из HTML-документов

Я создаю приложение, которое будет принимать URL-адрес в качестве входных данных, извлекать html-контент страницы из Интернета и извлекать все, что не содержится в теге . Другими словами, текстовое содержимое страницы, которое видит посетитель этой страницы. Это включает в себя «маскировку» всего, что заключено в , и , поскольку эти части содержат текст, который не заключен в тег (но лучше оставить его в покое).

Я построил это регулярное выражение:

(?:<(?Pscript|style)[\s\S]*?)|(?:)|(?:<[\s\S]*?>)

Он правильно выбирает все содержимое, которое я хочу игнорировать, и оставляет только текстовое содержимое страницы. Однако это означает, что то, что я хочу извлечь, не будет отображаться в коллекции совпадений (я использую VB.Net в Visual Studio 2010).

Есть ли способ «инвертировать» сопоставление всего документа, например это, чтобы я получил совпадения по всем текстовым строкам, которые не учитывались совпадением в приведенном выше регулярном выражении?

Пока что я добавил еще одну альтернативу в конце, которая выбирает «любую последовательность, которая не содержит ", что означает оставшийся текст. Я назвал этот последний бит в группе захвата, и когда я перебираю совпадения, я проверяю наличие текста в группе «текст». Это работает, но мне было интересно, можно ли все это сделать с помощью регулярного выражения, а только в конечном итоге совпадут с открытым текстом.

Предполагается, что это работает в общем, без каких-либо конкретных тегов в html. Предполагается извлечь весь текст. Кроме того, мне нужно сохранить исходный HTML-код, чтобы на странице сохранились все его ссылки и скрипты - мне нужно только иметь возможность извлекать текст, чтобы я мог выполнять поиск и замену в нем, не опасаясь «переименования» любых тегов, атрибутов. или переменные сценария и т. д. (так что я не могу просто сделать "заменить ничем" для всех совпадений, которые я получаю, потому что, даже если у меня остается то, что мне нужно, сложно снова вставить это обратно в правильные места полностью функциональный документ). Вот решение (на основе регулярных выражений), к которому я пришел: http://www.martinwardener.com/regex/ , реализованный в демонстрационном веб-приложении, которое будет отображать как активные строки регулярного выражения, так и механизм тестирования, который позволяет запускать синтаксический анализ на любой онлайн-странице html, предоставляя вам время синтаксического анализа и извлеченные результаты (для отдельных частей ссылки, URL-адреса и текста, а также представления, в которых все совпадения регулярных выражений выделены на месте в полном документе HTML) .

1
задан d7samurai 29 October 2010 в 05:35
поделиться