#ruby
#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
строку, просто чтобы посмотреть, отображается ли что-то еще, но для меня это не имеет большого смысла.
Ответ №1:
Либо строка содержит какой-то другой вид пробела, либо вы разбиваете на какой-то другой вид пробела. Например "foou2002bar"
, будет выглядеть foo bar
, но содержит специальный пробел.
Попробуйте msg.dump
увидеть специальные символы.
2.6.5 :008 > msg = "foou2002bar"
=> "foo bar"
2.6.5 :009 > msg.dump
=> ""foo\u2002bar""
Чтобы разделить на любой пробел или табуляцию, разделите [[:blank:]]
класс символов.
2.6.5 :006 > msg.split(/[[:blank:]]/)
=> ["foo", "bar"]
Комментарии:
1. Спасибо.
msg.dump
на самом деле отображалосьu0040
как то, что отображалось как пробел / пробел. Это решение сработало для меня.2. @LewlSauce
u0040
— это @ . Вы уверены?3. Извините, опечатка. Это было на самом деле
u00A0
4. @LewlSauce Неразрывный пробел. Рад, что все работает.