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 alternativas están disponibles?
Antecedentes : las cadenas son ASCII sin formato, tengo acceso a ruby 1.9.1 y estoy usando Plain Old Ruby Objects (sin marcos web).
chars
lugar de dividir.join
funciona. No creo que necesites el últimoto_s
si usas unirse.n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
. Necesitaba los to_s para realizar el to_i para extraer el valor numérico."123".split(//).last(5).join
(Ruby 2.0.0)Bueno, la solución más fácil que se me ocurre es:
(EDITAR: el
or
operador tiene una precedencia menor que la asignación, así que asegúrese de usarlo||
)fuente
string.reverse[0..n].reverse
, lo que me da un segundo de "espera, ¿por qué está haciendo eso?" (o lo haría si no lo estuviera leyendo en el contexto de esta pregunta)||
lugar deor
, o poner paréntesisstr[-n..-1] or str
.En Ruby recto (sin rieles), puede hacer
Por ejemplo:
Si está utilizando Ruby on Rails, puede llamar a métodos
first
ylast
en un objeto de cadena. Se prefieren estos métodos porque son sucintos e intuitivos.Por ejemplo:
fuente
fuente
"abcde".reverse[0,3].reverse
>>> "cde""ab".reverse[0,3].reverse
>>> "ab""a".reverse[0,3].reverse
>>> "a"Puede utilizar el siguiente código:
fuente
Para obtener los últimos n caracteres de una cadena, puede hacer esto
a [-n, n] si a es la matriz.
Aquí tienes 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"
fuente
nil
se devuelve, que es lo que esta pregunta trataba de evitar específicamente.¿Has probado una expresión regular?
La expresión regular captura tantos caracteres como pueda al final de la cadena, pero no más de n. Y lo guarda en $ 1.
fuente
Mejora en la respuesta de EmFi.
fuente