Извлечение последних n символов из строки рубина - PullRequest
98 голосов
/ 01 февраля 2010

Чтобы получить последние n символов из строки, я предположил, что вы можете использовать

ending = string[-n..-1]

но если длина строки меньше n букв, вы получите nil.

Какие обходные пути доступны?

Справочная информация : строки представляют собой обычный ASCII, и у меня есть доступ к ruby ​​1.9.1, и я использую простые старые объекты Ruby (без веб-каркасов).

Ответы [ 8 ]

107 голосов
/ 01 февраля 2010

Ну, самый простой обходной путь, который я могу придумать, это:

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

(РЕДАКТИРОВАТЬ: оператор or имеет более низкий приоритет, чем назначение, поэтому обязательно используйте ||.)

94 голосов
/ 07 марта 2011

Здесь у вас есть один вкладыш, вы можете поставить число больше размера строки:

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

Для рубина 1.9 +

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

Для ruby ​​2.0+, join возвращает строку

"123".split(//).last(5).join
43 голосов
/ 19 декабря 2014

В прямом 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 и last для строкового объекта. Эти методы предпочтительны, поскольку они лаконичны и интуитивны.

Например:

[1] pry(main)> a = 'abcdefg'                                                                                                                
 => "abcdefg"
[2] pry(main)> a.first(3)                                                                                                                   
 => "abc"
[3] pry(main)> a.last(4)                                                                                                                    
 => "defg"
13 голосов
/ 01 февраля 2010
ending = string.reverse[0...n].reverse
8 голосов
/ 03 июня 2015

Вы можете использовать следующий код:

string[string.length-n,string.length]
8 голосов
/ 01 сентября 2011

Чтобы получить последние 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"

5 голосов
/ 01 февраля 2010

Вы пробовали регулярное выражение?

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

Регулярное выражение захватывает столько символов, сколько может в конце строки, но не более n. И хранит его в $ 1.

1 голос
/ 05 декабря 2012

Улучшение ответа EmFi.

string[/.{,#{n}}\z/m]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...