我有这个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)
使用regexp处理HTML是一个非常糟糕的主意.上面的黑客不会处理类似的东西
<tag attribute=">">Hello</tag>
<script>if (a < b) alert('Hello>');</script>
等等
更好的方法是使用例如Jsoup.要从字符串中删除所有标记,您可以执行此操作Jsoup.parse(html).text()
.
使用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 的存在不会干扰解析