代码之家  ›  专栏  ›  技术社区  ›  Aaron Yodaiken Stephen Chung

使用ruby从html文档中删除空白

  •  4
  • Aaron Yodaiken Stephen Chung  · 技术社区  · 14 年前

    所以我在ruby中有一个字符串

    str = "<html>\n<head>\n\n  <title>My Page</title>\n\n\n</head>\n\n<body>" +
          "  <h1>My Page</h1>\n\n<div id=\"pageContent\">\n  <p>Here is a para" +
          "graph. It can contain  spaces that should not be removed.\n\nBut\n" +
          "line breaks that should be removed.</p></body></html>"
    

    如何删除标记外部的所有空白(空格、制表符和换行符),而不是包含以下内容的标记内部的空白 <p> 只使用原生Ruby?

    (对于这么简单的任务,我希望避免使用XSLT或其他东西。)

    4 回复  |  直到 14 年前
        1
  •  11
  •   domhabersack    14 年前
    str.gsub!(/\n\t/, " ").gsub!(/>\s*</, "><")
    

    那是第一个 gsub! 将所有换行符和制表符替换为空格,第二个将删除标记之间的空格。

    你会在你的标签里有多个空格,但是如果你删除了所有的 \n \t ,您将得到类似“not be remove.Butline breaks”的内容,这不太可读。另一个正则表达式或前面提到的 .squeeze(" ") 我能搞定的。

        2
  •  7
  •   user1158559    12 年前

    我不想对regexen吹毛求疵,但其他答案都不完全正确。这将起作用:

    str.gsub(/>\s*/, ">").gsub(/\s*</, "<")
    

    /\s/ 匹配所有空格字符,包括换行符。其他答案中的正则表达式并不完全正确,因为它们的正则表达式不匹配 "\r" ,在Windows中用于行的末尾,并将出现在电子邮件中。

    我的线路也将转换为 <p> foo bar </p> 进入之内 <p>foo bar</p> ,但你可能不想要这个。

        3
  •  1
  •   Justin L.    14 年前

    hello world 进入之内 hello world

    "hello     world".squeeze(" ")  # => "hello world"
    

    其中,压缩参数是要压缩的字符。

    编辑:对不起,我误读了你的问题。

    这会

    • 在标记外保留单个空格

    我现在就想办法。

        4
  •  0
  •   phil pirozhkov    8 年前
    xml.squish.gsub /(> <)/, '><'
    

    比上面还要短。