我尝试strip
字符串的前导空格:
" Bagsværd".strip # => " Bagsværd"
我希望它会返回"Bagsværd"
。
答案 0 :(得分:34)
字符串" Bagsværd"
来自哪里?
字符串开头的空格字符可能不是“普通”空格,而是非空格(U + 00A0):
2.0.0p353 :001 > " Bagsværd".strip
=> "Bagsværd"
2.0.0p353 :002 > "\u00a0Bagsværd".strip
=> " Bagsværd"
您可以使用gsub
而非strip
2.0.0p353 :003 > "\u00a0Bagsværd".gsub(/\A\p{Space}*/, '')
=> "Bagsværd"
这使用\A
anchor和\p{Space}
character property来模拟lstrip
。要删除前导和尾随空格,请使用:
2.0.0p353 :007 > "\u00a0Bagsværd\u00a0".gsub(/\A\p{Space}*|\p{Space}*\z/, '')
=> "Bagsværd"
答案 1 :(得分:4)
字符串中的第一个字符是不是空格
" Bagsværd".bytes
[194, 160, 66, 97, 103, 115, 118, 195, 166, 114, 100]
" Bagsværd".chars[0].ord
=> 160
这是U+00A0
不间断的空间。注意我可以告诉你,因为问题的可编辑形式保留了角色(而任何试图从渲染 SO帖子剪切和粘贴的人都无法复制你的问题)
答案 2 :(得分:2)
strip
最不可能删除空格的方式是,它不是真正的空间,而是一个不间断的空间。
在你的机器上试试这个:
# encoding: utf-8
" Bagsværd".chars.map(&:ord)
我的,使用Ruby 2.0.0p353:
# => [160, 66, 97, 103, 115, 118, 230, 114, 100]
答案 3 :(得分:0)
第一个字符是空格还是其他字符,例如\ u00af(Non-breaking space)
这可能会产生相同的结果:
#encoding: utf-8
puts " Bagsværd".strip #Bagsværd
a = "\u00A0Bagsværd"
puts a # Bagsværd
puts a.strip # Bagsværd
#Maybe the example works not, when the code is posted/taken via cut+paste
b = ' Bagsværd'
p a == b #true
您可以查看您拥有的内容:
a = "\u00A0Bagsværd"
b = ' Bagsværd'
p a.codepoints.to_a #[160, 66, 97, 103, 115, 118, 230, 114, 100]
p b.codepoints.to_a #[32, 66, 97, 103, 115, 118, 230, 114, 100]