Um die letzten n
Zeichen aus einer Zeichenfolge zu erhalten, habe ich angenommen, dass Sie sie verwenden können
ending = string[-n..-1]
aber wenn die Zeichenfolge weniger als n
Buchstaben lang ist, erhalten Sie nil
.
Welche Problemumgehungen sind verfügbar?
Hintergrund : Die Zeichenfolgen sind ASCII-Zeichenfolgen, ich habe Zugriff auf Ruby 1.9.1 und verwende einfache alte Ruby-Objekte (keine Webframeworks).
chars
anstelle von split verwenden.join
funktioniert. Ich glaube nicht, dass Sie den letzten brauchen,to_s
wenn Sie join verwenden.n.xpath('ReferenceID').inner_text.split(//).last(7).join.to_s.to_i
Ich brauchte die to_s, um das to_i auszuführen, um den numerischen Wert zu extrahieren."123".split(//).last(5).join
(Ruby 2.0.0)Die einfachste Problemumgehung, die ich mir vorstellen kann, ist:
(BEARBEITEN: Der
or
Operator hat eine niedrigere Priorität als die Zuweisung. Verwenden Sie ihn||
stattdessen.)quelle
string.reverse[0..n].reverse
, was mir eine Sekunde Zeit gibt: "Warte, warum macht er das?" (oder würde, wenn ich es nicht im Zusammenhang mit dieser Frage lesen würde)||
statt seinor
oder Klammern setzenstr[-n..-1] or str
.In Straight Ruby (ohne Rails) können Sie dies tun
Beispielsweise:
Wenn Sie Ruby on Rails verwenden, können Sie Methoden
first
undlast
ein Zeichenfolgenobjekt aufrufen . Diese Methoden werden bevorzugt, da sie kurz und intuitiv sind.Beispielsweise:
quelle
quelle
"abcde".reverse[0,3].reverse
>>> "cde""ab".reverse[0,3].reverse
>>> "ab""a".reverse[0,3].reverse
>>> "a"Sie können den folgenden Code verwenden:
quelle
Um die letzten n Zeichen aus einer Zeichenfolge zu erhalten, können Sie dies tun
a [-n, n] wenn a das Array ist.
Hier ist ein Beispiel, wenn Sie eines möchten.
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
quelle
nil
wird zurückgegeben, was diese Frage speziell zu vermeiden versuchte.Haben Sie eine Regex ausprobiert?
Der reguläre Ausdruck erfasst so viele Zeichen wie möglich am Ende der Zeichenfolge, jedoch nicht mehr als n. Und speichert es in 1 $.
quelle
Verbesserung der Antwort von EmFi.
quelle