scan metodos example array ruby string

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