我有一个看起来像这样的字符串:
d = "foo\u00A0\bar"
当我检查长度时,它表示长度为7个字符。我在网上查了一下,发现它是一个不间断的空间。有人可以告诉我如何删除字符串中的所有不间断空格?
答案 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。