我的输入是纯文本字符串,要求删除除少数特定标记之外的所有html标记,如:
<p>
<li>
<u>
<li>
如果这些特定代码包含class
或id
等属性,我想删除这些属性。
一些例子:
<a href = "#">Link</a> -> Link
<p>paragraph</p> -> <p>paragraph</p>
<p class="class1">paragraph</p> -> <p>paragraph</p>
我已经完成了这个Remove HTML tags from a String,但它没有完全回答我的问题。
它可以由一组正则表达式处理,还是可以使用某些库?
答案 0 :(得分:12)
我尝试了JSoup,它似乎能够处理所有这些情况。这是示例代码。
public String clean(String unsafe){
Whitelist whitelist = Whitelist.none();
whitelist.addTags(new String[]{"p","br","ul"});
String safe = Jsoup.clean(unsafe, whitelist);
return StringEscapeUtils.unescapeXml(safe);
}
输入字符串
String unsafe = "<p class='p1'>paragraph</p>< this is not html > <a link='#'>Link</a> <![CDATA[<sender>John Smith</sender>]]>";
我得到以下输出,这是我非常需要的。
<p>paragraph</p>< this is not html > Link <sender>John Smith</sender>
答案 1 :(得分:4)
对于简单的HTML,这可能就足够了:
// remove any <script> tags
html = html.replaceAll("(?i)<script.*?</script>", ""));
// this removes any attributes
html = html.replaceAll("(?i)<([a-zA-Z0-9-_]*)(\\s[^>]*)>", "<$1>"));
// this removes any tags (not li and p)
html = html.replaceAll("(?i)<(?!(/?(li|p)))[^>]*>", ""));
希望有所帮助。