Regex для удаления html не избавляется от тега img - PullRequest
0 голосов
/ 14 июня 2011

Я использую регулярное выражение для удаления тегов HTML. Я делаю что-то вроде - result.replaceAll ("\ <. *? \>", "");

Однако это не помогает мне избавиться от тегов img в html. Есть идеи, как это можно сделать?

Ответы [ 7 ]

2 голосов
/ 14 июня 2011

Если вы не можете использовать HTML-парсеры / очистители, я бы по крайней мере предложил вам использовать флаг Pattern.DOTALL для работы с многострочными блоками HTML. Рассмотрим код, подобный следующему:

String str = "123 <img \nsrc='ping.png'>abd foo";
Pattern pt = Pattern.compile("<.*?>", Pattern.DOTALL);
Matcher matcher = pt.matcher(str);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sb, "");
}
matcher.appendTail(sb);
System.out.println("Output: " + sb);

OUTPUT

Output: 123 abd foo
1 голос
/ 14 июня 2011

Другое предложение: HtmlCleaner

1 голос
/ 14 июня 2011

Чтобы дать более конкретную рекомендацию, используйте JSoup (или NekoHTML ) для анализа HTML-объекта в Java.1007 * объект, который можно легко пройти, чтобы удалить теги.Этот рецепт поваренной книги показывает, как получить атрибуты и текст из DOM.

0 голосов
/ 24 апреля 2017

Мне удалось сделать это с помощью приведенного ниже фрагмента кода.

String htmlContent = values.get(position).getContentSnippet();
String plainTextContent = htmlContent.replaceAll("<img .*?/>", "");

Я использовал приведенное выше регулярное выражение для очистки тегов img в своем контенте RSS.

0 голосов
/ 14 июня 2011

Итак, кусок кода для вас. Я использую http://htmlparser.sourceforge.net/ для разбора HTML. Он не слишком сложен и прост в использовании.

В основном это выглядит так:

import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;

    ...

    String html; /* read your HTML into variable 'html' */
    String result=null;
    ....
    try {
        Parser p = new Parser(html);
        NodeList nodes = p.parse(null);
        result = nodes.asString();
    } catch (ParserException e) {
        e.printStackTrace();
    }

Это даст вам простой текст без тегов (но никакие заменители, такие как & amp; не будут исправлены). И, конечно, вы можете сделать намного больше с этой библиотекой, например, применяя фильтры, посетителей, итерации и все такое.

0 голосов
/ 14 июня 2011

Я просто повторяю то, что уже сказали другие, но этот момент нельзя переоценить: НЕ ИСПОЛЬЗУЙТЕ РЕКЕКСЫ ДЛЯ РАЗДЕЛЕНИЯ HTML.Есть еще 1000 похожих вопросов по этому вопросу на SO.Используйте правильный HTML-парсер, он сделает вашу жизнь намного проще, а также намного более надежной и надежной.Взгляните на Dom4j, Иерихон, JSoup.Пожалуйста.

0 голосов
/ 14 июня 2011

используйте вместо этого html-парсер.итерируйте по объекту, печатайте так, как вам нравится, и получите лучший результат.

...