当前位置: 首页 > 知识库问答 >
问题:

删除所有格式和链接标签,只保留文本

禹智渊
2023-03-14

假设我有一个像这样的html片段:

<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>

我想从中得到的是:

foo bar foobar baz

所以我的问题是:如何从html中去掉所有包装标签,只得到与html中相同顺序的文本?正如您在标题中看到的,我想使用jsoup进行解析

重音html示例(请注意“á”字符):

<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>
<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>

我想要的是:

Tarthatatlan biztonsági viszonyok
Tarthatatlan biztonsági viszonyok

这个html不是静态的,一般来说,我只是想解码人类可读形式的通用html片段的每一个文本,宽度线中断。

共有3个答案

薛涛
2023-03-14

实际上,使用Jsoup清理的正确方法是通过白名单

...
final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);
Whitelist wl = Whitelist.none()
String cleanText = Jsoup.clean(doc.html(), wl)

如果你还想保留一些标签:

Whitelist wl = new Whitelist().relaxed().removeTags("a")
何玉韵
2023-03-14

使用Regex:-

String str = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
str = str.replaceAll("<[^>]*>", "");
System.out.println(str);

输出:-

  foo   bar  foobar  baz 

使用JSoup:-

Document doc = Jsoup.parse(str); 
String text = doc.text();
邹德泽
2023-03-14

使用Jsoup:

final String html = "<p> <span> foo </span> <em> bar <a> foobar </a> baz </em> </p>";
Document doc = Jsoup.parse(html);

System.out.println(doc.text());

输出:

foo bar foobar baz

如果您只需要p-tag的文本,请使用该文本而不是doc。text()

doc.select("p").text();

...或者只有身体:

doc.body().text();
final String html = "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>"
        + "<p><strong>Tarthatatlan biztonsági viszonyok</strong></p>";
Document doc = Jsoup.parse(html);

for( Element element : doc.select("p") )
{
    System.out.println(element.text());
    // eg. you can use a StringBuilder and append lines here ...
}

输出:

Tarthatatlan biztonsági viszonyok  
Tarthatatlan biztonsági viszonyok
 类似资料:
  • 我正在尝试使用 Jsoup 删除 HTML 页面标记之间的所有文本 例如,如果输入HTML是 输出应该是 基本上,我想删除返回的内容。 我找到了很多相反的帖子,只保留文本,但没有解决我的问题。知道怎么做吗? 编辑 maverick9999:https://stackoverflow.com/a/24292349/3589481提出的解决方案将解决大部分情况。 然而,正如评论中提到的,这个解决方案也

  • 问题内容: 假设我有一个这样的html片段: 我想从中提取的是: 所以我的问题是:如何从html中剥离所有包装标签,并仅以与html中相同的顺序获取文本?正如您在标题中看到的那样,我想使用jsoup进行解析。 重音html的示例(注意’á’字符): 我想要的是: 这个html并不是静态的,通常我只希望通用html片段的每个文本都以已解码的人类可读形式显示,宽度换行。 问题答案: 使用Jsoup:

  • 问题内容: 我正在尝试使用Jsoup删除HTML页面的标签之间的所有文本 例如,如果输入的HTML是 输出应为 基本上,我想删除由返回的内容 我发现有很多帖子是相反的,只保留文本,而没有什么可以解决我的问题。有关如何执行此操作的任何想法? 编辑 maverick9999提出的解决方案将解决大多数情况。 但是,正如注释中所注意到的,此解决方案还将删除嵌套标签。 举个例子: 将在输出中删除一个div:

  • 我想清除所有筛选规则,但保留筛选本身。 有没有直接快速的方法去做呢? 我找到的代码是: 它获取筛选器对象,我对筛选器#的选项数量是有限的。 注意:删除此筛选器,但我需要保留它。

  • 问题内容: 问题是这样的:我有一个像这样的XML片段: 为了得到结果,我想删除所有-和-Tags,但保留它们的(文本)内容和子节点不变。另外,-Element应该保持不变。结果应该这样 目前,我将回到一个非常肮脏的把戏:我将etree.tostring这个片段,通过正则表达式删除有问题的标签,并用etree.fromstring结果替换原始片段(不是真正的代码,但是应该这样): 我知道我可能可以使

  • 这似乎是一个简单的解决方案,但我一辈子都无法解决。 我有一个由< code >混合组成的元素集合 我想做的就是保留所有东西(包括标签和它的字符串),这是一个干净的