【问题标题】:Removing HTML tags except line breaks删除除换行符之外的 HTML 标记
【发布时间】:2012-02-17 10:18:56
【问题描述】:

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

【问题讨论】:

    标签: android html regex line-breaks


    【解决方案1】:

    不要使用正则表达式来解析 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();
    

    为了有选择地剥离它,只保留 &lt;a&gt;(和 href 属性)和 &lt;br&gt; 标签我建议你使用 JSoup

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

    【讨论】:

      【解决方案2】:

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

      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>");
      

      代码未经测试,因此可能无法正常工作:)

      【讨论】:

      • This always feels relevant 当人们使用正则表达式来处理 XML/HTML 时。
      • 没错,正则表达式解析不适用于每个外在的 xml/html 文件。只有当文件的语法已知时,它才能可靠地工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多