[ruby] 루비 문자열에서 마지막 n 개 문자 추출

n문자열에서 마지막 문자 를 얻으려면 다음을 사용할 수 있다고 가정했습니다.

ending = string[-n..-1]

그러나 문자열이 n글자 보다 짧으면 nil.

어떤 해결 방법을 사용할 수 있습니까?

배경 : 문자열은 일반 ASCII이며 ruby ​​1.9.1에 액세스 할 수 있으며 Plain Old Ruby Objects (웹 프레임 워크 없음)를 사용하고 있습니다.



답변

여기에 하나의 라이너가 있으며 문자열 크기보다 큰 숫자를 넣을 수 있습니다.

"123".split(//).last(5).to_s

루비 1.9 이상

"123".split(//).last(5).join("").to_s

루비 2.0+의 경우 join은 문자열을 반환합니다.

"123".split(//).last(5).join


답변

제가 생각할 수있는 가장 쉬운 해결 방법은 다음과 같습니다.

ending = str[-n..-1] || str

(편집 : or연산자는 할당보다 우선 순위가 낮으므로 ||대신 사용하십시오 .)


답변

직선 Ruby (Rails 제외)에서는 다음을 수행 할 수 있습니다.

string.chars.last(n).join

예를 들면 :

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"

Ruby on Rails를 사용하는 경우 메서드 firstlast문자열 객체를 호출 할 수 있습니다 . 이러한 방법은 간결하고 직관적이기 때문에 선호됩니다.

예를 들면 :

[1] pry(main)> a = 'abcdefg'
 => "abcdefg"
[2] pry(main)> a.first(3)
 => "abc"
[3] pry(main)> a.last(4)
 => "defg"


답변

ending = string.reverse[0...n].reverse


답변

다음 코드를 사용할 수 있습니다.

string[string.length-n,string.length]


답변

문자열에서 마지막 n 개의 문자를 얻으려면 다음을 수행 할 수 있습니다.

a가 배열이면 a [-n, n].

원하는 경우 여기와 예가 있습니다.

루비 -1.9.2-p180 : 006> a = “911234567890”

=> “911234567890”

루비 -1.9.2-p180 : 009> a [-5,5]

=> “67890”

루비 -1.9.2-p180 : 010> a [-7,7]

=> “4567890”


답변

정규식을 사용해 보셨습니까?

string.match(/(.{0,#{n}}$)/)
ending=$1

정규식은 문자열 끝에서 가능한 한 많은 문자를 캡처하지만 n 개를 넘지 않습니다. 그리고 $ 1에 저장합니다.