регулярное выражение для извлечения текста из HTML

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
17
задан Charles Stewart 2 January 2010 в 21:01
поделиться

8 ответов

Вы не можете действительно проанализировать HTML с регулярными выражениями. Это слишком сложно. Ре не обработает <![CDATA[ разделы правильно вообще. Далее, некоторые виды общих вещей HTML как &lt;text> будут работать в браузере надлежащим текстом, но могли бы экранировать наивного РЕ.

Вы будете более счастливыми и более успешными с надлежащим синтаксическим анализатором HTML. Люди Python часто используют что-то , Красивый Суп для парсинга HTML и полосы отмечает и сценарии.

<час>

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

Вы могли бы быть в состоянии проанализировать плохой HTML с Ре. Все, чего требуется, является терпением и тяжелой работой. Но часто более просто использовать чужой синтаксический анализатор.

11
ответ дан 30 November 2019 в 10:50
поделиться

Удалите JavaScript и CSS:

<(script|style).*?</\1>

Удаляют теги

<.*?>
16
ответ дан 30 November 2019 в 10:50
поделиться

Рассмотрение выполнения этого с регулярными выражениями является пугающим. Вы рассмотрели XSLT? Выражение XPath для извлечения всех текстовых узлов в документе XHTML, минус сценарий & разработайте содержание, был бы:

//body//text()[not(ancestor::script)][not(ancestor::style)]
4
ответ дан 30 November 2019 в 10:50
поделиться

Используя синтаксис жемчуга для определения regexes, запуск мог бы быть:

!<body.*?>(.*)</body>!smi

Тогда применение следующей замены к результату той группы:

!<script.*?</script>!!smi
!<[^>]+/[ \t]*>!!smi
!</?([a-z]+).*?>!!smi
/<!--.*?-->//smi

Это, конечно, не отформатирует вещи приятно как текстовый файл, но он разделяет весь HTML (главным образом, существует несколько случаев, где он не мог бы работать совершенно верно). Лучшая идея, хотя должен использовать синтаксический анализатор XML на любом языке, Вы используете, чтобы проанализировать HTML правильно и извлечь текст из этого.

2
ответ дан 30 November 2019 в 10:50
поделиться

Ни уверенный эта страница могла помочь.

2
ответ дан 30 November 2019 в 10:50
поделиться

При использовании PHP попробуйте Простой HTML DOM, доступный в SourceForge.

Иначе, Google html2text, и Вы найдете множество реализаций для различных языков, которые в основном используют серию регулярных выражений для высасывания всей разметки. Будьте осторожны здесь, потому что теги без окончаний могут иногда оставляться внутри, а также специальные символы, такие как & (который является & усилитель;).

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

1
ответ дан 30 November 2019 в 10:50
поделиться

Я полагаю, что можно просто сделать

document.body.innerText

, Который возвратит содержание всех текстовых узлов в документе, видимом или нет.

[редактирование (olliej): вздох nevermind, это только работает в Safari и IE, и я не могу быть побеспокоен, загрузив Firefox ночью, чтобы видеть, существует ли он в соединительной линии:-/]

0
ответ дан 30 November 2019 в 10:50
поделиться

Самый простой способ для простого HTML (пример на Python):

text = "<p>This is my> <strong>example</strong>HTML,<br /> containing tags</p>"
import re
" ".join([t.strip() for t in re.findall(r"<[^>]+>|[^<]+",text) if not '<' in t])

Возвращает это:

'This is my> example HTML, containing tags'
2
ответ дан 30 November 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: