我从服务器接收带有HTML标签的字符串。我正在使用像string1.replaceAll("\\<.*?>","")
之类的正则表达式删除这些标记,但问题是它还删除了换行符和超链接。我想保留超链接和换行符并删除其他所有内容。
答案 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>");
代码未经测试,因此可能无效:)