2011-02-01 45 views
14

刪除非打破空間我有一個字符串,它看起來像這樣:如何在Ruby中

d = "foo\u00A0\bar" 

當我檢查的長度,它說,它是長7個字符。我在網上查了一下,發現這是一個不間斷的空間。有人能告訴我如何刪除字符串中的所有非空白空格嗎?

回答

23
irb(main):001:0> d = "foo\u00A0\bar" 
=> "foo \bar" 
irb(main):002:0> d.gsub("\u00A0", "") 
=> "foo\bar" 
2

這是一個古老的線程,但也許它有助於某人。 我發現自己正在尋找解決相同問題的方法,當我發現strip沒有完成這項工作時。我用的方法ord什麼角色是被檢查和使用chr代表它在gsub

2.2.3 :010 > 160.chr("UTF-8") 
=> " " 
2.2.3 :011 > 160.chr("UTF-8").strip 
=> " " 
2.2.3 :012 > nbsp = 160.chr("UTF-8") 
=> " " 
2.2.3 :013 > nbsp.gsub(160.chr("UTF-8"),"") 
=> "" 

我不明白爲什麼strip不刪除的東西,看起來像一個空間給我,讓我檢查here什麼ASCII 160實際上是。

10

如果你不關心非打破空間具體來說,而是任何「特殊」的Unicode空白可能出現在你的字符串的字符,你可以使用POSIX括號表達式的空格替換:

s.gsub(/[[:space:]]/, '') 

這些括號表達式(與\s等匹配器相對)不僅與ASCII字符匹配,而且與類的所有Unicode字符匹配。

欲瞭解更多詳情,請參閱the ruby documentation

+0

非常有用的,當你有定期的空白加上討厭的HTML`&nbsp`在相同的字符串。 – MatzFan 2017-11-25 20:28:26