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

Mri*_*lla 25 ruby

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

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文档


Bar*_*t C 5

这是一个旧线程,但也许它可以帮助某人。当我发现 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 实际上是什么。