ruby - metodos - Extrayendo los últimos n caracteres de una cadena de rubíes
scan ruby example (8)
¿Has probado una expresión regular?
string.match(/(.{0,#{n}}$)/)
ending=$1
La expresión regular captura todos los caracteres que puede al final de la cadena, pero no más que n. Y lo almacena en $ 1.
Para obtener los últimos n
caracteres de una cadena, asumí que podrías usar
ending = string[-n..-1]
pero si la cadena tiene menos de n
letras, obtienes nil
.
¿Qué soluciones están disponibles?
Fondo : Las cadenas son simples ASCII, y tengo acceso a ruby 1.9.1, y estoy usando Plain Old Ruby Objects (sin frameworks web).
Aquí tienes un trazador de líneas, puedes poner un número mayor que el tamaño de la cadena:
"123".split(//).last(5).to_s
Para ruby 1.9+
"123".split(//).last(5).join("").to_s
Para ruby 2.0+, join devuelve una cadena
"123".split(//).last(5).join
Bueno, la solución más fácil que puedo pensar es:
ending = str[-n..-1] || str
(EDITAR: El operador or
tiene una prioridad menor que la asignación, así que asegúrese de usar ||
lugar).
En Ruby directo (sin rieles), puedes hacer
string.chars.last(n).join
Por ejemplo:
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"
Si está utilizando Ruby on Rails, puede llamar a los métodos first
y last
en un objeto de cadena. Se prefieren estos métodos ya que son sucintos e intuitivos.
Por ejemplo:
[1] pry(main)> a = ''abcdefg''
=> "abcdefg"
[2] pry(main)> a.first(3)
=> "abc"
[3] pry(main)> a.last(4)
=> "defg"
Mejora en la respuesta de EmFi.
string[/.{,#{n}}/z/m]
Para obtener los últimos n caracteres de una cadena, podrías hacer esto
a [-n, n] si a es la matriz.
Aquí hay un ejemplo si quieres uno.
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"
Puedes usar el siguiente código:
string[string.length-n,string.length]
ending = string.reverse[0...n].reverse