【发布时间】:2012-02-17 10:18:56
【问题描述】:
我正在从具有 HTML 标记的服务器接收字符串。我正在使用像string1.replaceAll("\\<.*?>","") 这样的正则表达式删除这些标签,但问题是它也删除了换行符和超链接。我想保留超链接和换行符并删除其他所有内容。
【问题讨论】:
标签: android html regex line-breaks
我正在从具有 HTML 标记的服务器接收字符串。我正在使用像string1.replaceAll("\\<.*?>","") 这样的正则表达式删除这些标签,但问题是它也删除了换行符和超链接。我想保留超链接和换行符并删除其他所有内容。
【问题讨论】:
标签: android html regex line-breaks
不要使用正则表达式来解析 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();
为了有选择地剥离它,只保留 <a>(和 href 属性)和 <br> 标签我建议你使用 JSoup:
Whitelist whitelist = Whitelist.none().addTags("a", "br").addAttributes("a", "href");
String jsoupHtml = Jsoup.clean(html, whitelist);
【讨论】:
您可以尝试先将要保留的部分替换为某种中间格式,然后在删除所有其他标签后恢复原始部分。
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>");
代码未经测试,因此可能无法正常工作:)
【讨论】: