我有一个看起来像这样的字符串:
d = "foo\u00A0\bar"
Run Code Online (Sandbox Code Playgroud)
检查长度时,它表示长度为7个字符.我在网上查了一下,发现它是一个不间断的空间.有人可以告诉我如何删除字符串中的所有不间断空格?
小智 30
irb(main):001:0> d = "foo\u00A0\bar"
=> "foo \bar"
irb(main):002:0> d.gsub("\u00A0", "")
=> "foo\bar"
Run Code Online (Sandbox Code Playgroud)
Nob*_*are 29
如果您不关心特定的非中断空间,但是关于可能出现在字符串中的任何 "特殊"unicode空格字符,您可以使用空格的POSIX括号表达式替换它:
s.gsub(/[[:space:]]/, '')
Run Code Online (Sandbox Code Playgroud)
这些括号表达式(与匹配器相反\s)不仅匹配ASCII字符,还匹配类的所有unicode字符.
有关更多详细信息,请参阅ruby文档
这是一个旧线程,但也许它可以帮助某人。当我发现 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"),"")
=> ""
Run Code Online (Sandbox Code Playgroud)
我不明白为什么strip不删除对我来说看起来像空格的东西,所以我在这里检查了 ASCII 160 实际上是什么。