如何删除Ruby中的不间断空格

时间:2011-02-01 05:57:36

标签: ruby

我有一个看起来像这样的字符串:

d = "foo\u00A0\bar"

当我检查长度时,它表示长度为7个字符。我在网上查了一下,发现它是一个不间断的空间。有人可以告诉我如何删除字符串中的所有不间断空格?

4 个答案:

答案 0 :(得分:28)

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

答案 1 :(得分:24)

如果您不关心非破坏性空间,但是关于任何“特殊”unicode空格字符可能出现在您的字符串中,您可以使用POSIX括号表达式替换它空白:

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

这些括号表达式(与\s之类的匹配器相对)不仅匹配ASCII字符,还匹配类的所有unicode字符。

有关详细信息,请参阅the ruby documentation

答案 2 :(得分:3)

这是一个老线程,但也许它可以帮助某人。 当我发现条带无法完成工作时,我发现自己正在寻找解决同一问题的方法。我使用方法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。

答案 3 :(得分:2)

d.gsub("\u00A0", "")在Ruby 1.8中不起作用。而是使用d.gsub(/\302\240/,"")

有关1.8和1.9之间字符编码差异的更多信息,请参阅http://blog.grayproductions.net/articles/understanding_m17n