从rubystring中提取最后n个字符
为了得到string中的最后n字符,我假设你可以使用 
 ending = string[-n..-1] 
 但是如果string长度小于n字符,则会得到nil 。 
什么解决方法可用?
背景 :string是纯ASCII,我可以访问ruby1.9.1,我使用简单的旧的Ruby对象(没有Web框架)。
在这里你有一个class轮,你可以把一个数字大于string的大小:
 "123".split(//).last(5).to_s 
对于ruby1.9+
 "123".split(//).last(5).join("").to_s 
对于Ruby 2.0+,连接返回一个string
 "123".split(//).last(5).join 
那么,我能想到的最简单的解决方法是:
 ending = str[-n..-1] || str 
  (编辑: or运算符优先级低于赋值,所以一定要使用|| )。 
在直接的Ruby(没有Rails),你可以做
 string.chars.last(n).join 
例如:
 2.4.1 :009 > a = 'abcdefghij' => "abcdefghij" 2.4.1 :010 > a.chars.last(5).join => "fghij" 2.4.1 :011 > a.chars.last(100).join => "abcdefghij" 
 如果您使用的是Ruby on Rails,则可以first在string对象上调用方法。 这些方法是首选,因为它们简洁直观。 
例如:
 [1] pry(main)> a = 'abcdefg' => "abcdefg" [2] pry(main)> a.first(3) => "abc" [3] pry(main)> a.last(4) => "defg" 
 ending = string.reverse[0...n].reverse 
要从string中获取最后n个字符,可以这样做
a [-n,n]如果a是数组。
这里是例子,如果你想要一个。
ruby-1.9.2-p180:006> a =“911234567890”
>“911234567890”
ruby-1.9.2-p180:009> a [-5,5]
>“67890”
ruby-1.9.2-p180:010> a [-7,7]
>“4567890”
您可以使用下面的代码:
 string[string.length-n,string.length] 
你尝试过一个正则expression式吗?
 string.match(/(.{0,#{n}}$)/) ending=$1 
正则expression式可以在string的末尾捕获尽可能多的字符,但不能超过n。 并存储在$ 1。
改进EmFi的答案。
 string[/.{,#{n}}\z/m]