从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]