Aby uzyskać ostatnie n
znaki z ciągu, założyłem, że możesz użyć
ending = string[-n..-1]
ale jeśli ciąg jest krótszy niż n
litery, otrzymasz nil
.
Jakie obejścia są dostępne?
Tło : Ciągi są zwykłym ASCII i mam dostęp do Ruby 1.9.1 i używam zwykłych starych obiektów Ruby (bez frameworków internetowych).
chars
zamiast split.join
działa. Myślę, że nie potrzebujesz ostatniej,to_s
jeśli używasz dołączenia.n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
, potrzebowałem to_s, aby wykonać to_i, aby wyodrębnić wartość liczbową."123".split(//).last(5).join
(Ruby 2.0.0)Cóż, najłatwiejsze obejście, jakie przychodzi mi do głowy, to:
(EDYCJA:
or
Operator ma niższy priorytet niż przypisanie, więc pamiętaj, aby go użyć||
).źródło
string.reverse[0..n].reverse
, co daje mi sekundę "czekaj, dlaczego on to robi?" (lub zrobiłbym to, gdybym nie czytał tego w kontekście tego pytania)||
zamiast niejor
lub umieszczaj ją w nawiasachstr[-n..-1] or str
.W prostym Ruby (bez Railsów) możesz to zrobić
Na przykład:
Jeśli używasz Ruby on Rails, możesz wywoływać metody
first
ilast
obiekt typu string. Te metody są preferowane, ponieważ są zwięzłe i intuicyjne.Na przykład:
źródło
źródło
"abcde".reverse[0,3].reverse
>>> "cde""ab".reverse[0,3].reverse
>>> "ab""a".reverse[0,3].reverse
>>> "a"Możesz użyć następującego kodu:
źródło
Aby uzyskać ostatnie n znaków z łańcucha, możesz to zrobić
a [-n, n], jeśli a jest tablicą.
Oto przykład, jeśli chcesz.
ruby-1.9.2-p180: 006> a = "911234567890"
=> „911234567890”
rubin-1.9.2-p180: 009> a [-5,5]
=> „67890”
rubin-1.9.2-p180: 010> a [-7,7]
=> „4567890”
źródło
nil
zwracana jest wartość, której właśnie próbowano uniknąć w tym pytaniu.Czy próbowałeś użyć wyrażenia regularnego?
Wyrażenie regularne przechwytuje tyle znaków, ile może na końcu ciągu, ale nie więcej niż n. I przechowuje to za 1 dolara.
źródło
Poprawa odpowiedzi EmFi.
źródło