从ruby字符串中提取最后n个字符

时间:2010-02-01 05:05:29

标签: ruby string

要从字符串中获取最后n个字符,我假设您可以使用

ending = string[-n..-1]

但如果字符串长度小于n个字母,则会得到nil

有哪些可用的解决方法?

背景:字符串是纯ASCII,我可以访问ruby 1.9.1,我使用的是Plain Old Ruby Objects(没有Web框架)。

8 个答案:

答案 0 :(得分:107)

嗯,我能想到的最简单的解决方法是:

ending = str[-n..-1] || str

(编辑:or运算符的优先级低于赋值,因此请务必使用||。)

答案 1 :(得分:93)

这里有一个衬垫,你可以放一个大于字符串大小的数字:

"123".split(//).last(5).to_s

对于ruby 1.9 +

"123".split(//).last(5).join("").to_s

对于ruby 2.0+,join返回一个字符串

"123".split(//).last(5).join

答案 2 :(得分:41)

在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,则可以在字符串对象上调用方法firstlast。这些方法是首选,因为它们简洁直观。

例如:

[1] pry(main)> a = 'abcdefg'                                                                                                                
 => "abcdefg"
[2] pry(main)> a.first(3)                                                                                                                   
 => "abc"
[3] pry(main)> a.last(4)                                                                                                                    
 => "defg"

答案 3 :(得分:13)

ending = string.reverse[0...n].reverse

答案 4 :(得分:8)

要从字符串中获取最后n个字符,您可以执行此操作

a [-n,n]如果a是数组。

如果您需要,可以使用以下示例。

ruby​​-1.9.2-p180:006> a =“911234567890”

=> “911234567890”

ruby​​-1.9.2-p180:009>一个[-5,5]

=> “67890”

ruby​​-1.9.2-p180:010>一个[-7,7-]

=> “4567890”

答案 5 :(得分:8)

您可以使用以下代码:

string[string.length-n,string.length]

答案 6 :(得分:5)

你试过一个正则表达式吗?

string.match(/(.{0,#{n}}$)/)
ending=$1

正则表达式在字符串末尾捕获尽可能多的字符,但不超过n。并存储在1美元。

答案 7 :(得分:1)

改善EmFi的答案。

string[/.{,#{n}}\z/m]