删除除换行符之外的HTML标记

时间:2012-02-17 10:18:57

标签: android html regex line-breaks

我从服务器接收带有HTML标签的字符串。我正在使用像string1.replaceAll("\\<.*?>","")之类的正则表达式删除这些标记,但问题是它还删除了换行符和超链接。我想保留超链接和换行符并删除其他所有内容。

2 个答案:

答案 0 :(得分:4)

不要使用regexp来解析HTML。

从HTML中完全剥离它(不是你想要的,但很简单):

String html = "<h1>I only want<br/>line breaks and " + 
    "<a href='http://stackoverflow.com'>links</a>, <i>not</i>" +
    " the <b>other</b> stuff";
String sansHtml = Html.fromHtml(html).toString();

要有选择地剥离它,仅保留 <{b> <a>(以及href属性)和<br>标记,我建议您使用JSoup:< / p>

Whitelist whitelist = Whitelist.none().addTags("a", "br").addAttributes("a", "href");
String jsoupHtml = Jsoup.clean(html, whitelist);

答案 1 :(得分:0)

您可以先尝试使用某种中间格式替换要保留的部分,然后在删除所有其他标记后恢复原始部分。

string1.replaceAll("\\<br.*?>", "[br]");
string1.replaceAll("\\<a href='(.*?)'.*?>(.*?)\\<.*?>", "[link='$1' desc='$2']");
string1.replaceAll("\\<.*?>","");
string1.replaceAll("\\[br\\]", "<br\\>");
string1.replaceAll("\\[link='(.*?)' desc='(.*?)']", "<a href=\"$1\">$2<\\a>");

代码未经测试,因此可能无效:)