Ruby声称“”实际上不是一个空格?
我正在尝试解决为什么 Ruby 没有用空格分割我的字符串。例如:
[1] pry(#<irb>)> msg
=> "!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName"
[2] pry(#<irb>)> msg.split(" ")
=> ["!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName"]
[3] pry(#<irb>)> msg.include? " "
=> false
[8] pry(#<irb>)> msg.inspect
=> ""!iex <http://test-domain.com.au|test-domain.com.au> <mailto:first.last@test-domain.com.au|first.last@test-domain.com.au> FirstName""
[9] pry(#<irb>)>
正如您在上面看到的,我的字符串似乎包含空格,但该split方法不起作用。我试图inspect在字符串上运行只是为了查看是否正在显示其他内容,但这对我来说并没有多大意义。
回答
要么字符串包含其他类型的空格,要么您正在拆分其他类型的空格。例如"foou2002bar"将看起来像foo bar但包含一个特殊的空间。
尝试msg.dump查看特殊字符。
2.6.5 :008 > msg = "foou2002bar"
=> "foo?bar"
2.6.5 :009 > msg.dump
=> ""foou2002bar""
要在任何空格或制表符上拆分,请在[[:blank:]] 字符类上拆分。
2.6.5 :006 > msg.split(/[[:blank:]]/)
=> ["foo", "bar"]