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