2010-06-19 57 views
3

從HTML文檔中刪除空格,讓我有紅寶石一個字符串,它是像使用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或東西的任務這麼簡單。)

+0

你的html不正確。您有一個開放的

標籤和兩個關閉

。 – Andrew 2010-06-19 20:47:24

+0

..和虛假的,無與倫比的''標籤 – zetetic 2010-06-19 21:06:24

+0

哎呀,我的壞... – 2010-06-19 21:20:15

回答

9
str.gsub!(/\n\t/, " ").gsub!(/>\s*</, "><") 

首先gsub!替換所有換行符和製表符用空格,第二去除標籤之間的空格。

最後你會與你的標籤內的多個空格,但如果你只是刪除了所有\n\t,你會得到什麼「不removed.Butline休息」,這是不是很可讀。另一個正則表達式或前面提到的.squeeze(" ")可以解決這個問題。

+1

我不是正則表達式大師,但我需要使用'/(\ n | \ t | \ r)/'代替'/ \ n \ t /'來完成這個任務。我的最後一個正則表達式是'str.gsub(/(\ n | \ t | \ r)/,'').gsub(/> \ s *<')。擠('')' – 2011-03-08 20:53:19

+1

人們說在html上使用正則表達式的壞處:http://stackoverflow.com/a/1732454/165673 – Yarin 2014-01-19 00:02:10

+0

@Yarin這個答案通常是正確的。使用正則表達式來操縱HTML通常會導致痛苦。 – 2016-08-22 20:53:34

1

您可以通過使用字符串#擠壓凝結的空格字符的所有組到一個空間(即,hello worldhello world):

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

其中擠壓的參數是被擠壓的特徵。

編輯:我誤讀你的問題,對不起。

這將標籤

    • 刪除連續的空格離開空間個人外標籤

    我會研究解決方案的工作現在。

  • 5

    討厭regexen分裂頭髮,但沒有其他答案是嚴格正確的。這將工作:

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

    明確將換行是不必要的,因爲/\s/匹配所有空白字符,包括換行符。其他答案中的正則表達式並不嚴格正確,因爲它們的正則表達式不匹配"\r",它在Windows的行結尾處使用,並將顯示在電子郵件中。

    我的線路也會將<p> foo bar </p>轉換爲<p>foo bar</p>,但您可能不想要。

    0
    xml.squish.gsub /(> <)/, '><' 
    

    甚至比以上更短。

    PS我喜歡那些有趣的面孔。