正则表达式剥离HTML标记

ADI*_*DIT 12 html java regex

我有这个HTML输入:

<font size="5"><p>some text</p>
<p> another text</p></font>
Run Code Online (Sandbox Code Playgroud)

我想使用正则表达式删除HTML标记,以便输出为:

some text
another text
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议如何用正则表达式做到这一点?

aio*_*obe 38

既然你问,这是一个快速而肮脏的解决方案:

String stripped = input.replaceAll("<[^>]*>", "");
Run Code Online (Sandbox Code Playgroud)

(Ideone.com演示)

使用regexp处理HTML是一个非常糟糕的主意.上面的黑客不会处理类似的东西

  • <tag attribute=">">Hello</tag>
  • <script>if (a < b) alert('Hello>');</script>

等等

更好的方法是使用例如Jsoup.要从字符串中删除所有标记,您可以执行此操作Jsoup.parse(html).text().

  • 允许`>`作为引用属性值中的文字字符. (4认同)
  • 好吧,如果它是简单的东西,就像在简单的HTML中剥离标签一样,我可能已选择使用正则表达式.在您的场景中,我相信您最好使用正确的解析器. (3认同)
  • 我可以建议input.replaceAll("<[^>] +>",""); (2认同)

Bal*_*usC 9

使用HTML解析器.这是一个Jsoup示例.

String input = "<font size=\"5\"><p>some text</p>\n<p>another text</p></font>";
String stripped = Jsoup.parse(input).text();
System.out.println(stripped);
Run Code Online (Sandbox Code Playgroud)

结果:

some text another text

或者,如果您想保留换行符:

String input = "<font size=\"5\"><p>some text</p>\n<p>another text</p></font>";
for (String line : input.split("\n")) {
    String stripped = Jsoup.parse(line).text();
    System.out.println(stripped);
}
Run Code Online (Sandbox Code Playgroud)

结果:

some text
another text

Jsoup也提供更多优势.您可以使用select()接受类似jQuery的CSS选择器的方法轻松提取HTML文档的特定部分.它只要求文档在语义上良好.自1998年以来已弃用<font>标签的存在已经不是一个很好的指示,但如果您事先知道HTML结构的深度细节,它仍然是可行的.

也可以看看:


小智 4

您可以使用名为 Jericho Html 解析器的 HTML 解析器。

您可以从这里下载 - http://jericho.htmlparser.net/docs/index.html

Jericho HTML Parser 是一个 Java 库,允许分析和操作 HTML 文档的各个部分,包括服务器端标记,同时逐字再现任何无法识别或无效的 HTML。它还提供高级 HTML 表单操作功能。

格式错误的 HTML 的存在不会干扰解析