2012-03-02 61 views
11

Tôi có một chuỗi các chuỗi, có độ dài và nội dung khác nhau.Trích xuất từ ​​cuối cùng trong câu/chuỗi?

Bây giờ tôi đang tìm một cách dễ dàng để trích xuất từ ​​cuối cùng từ mỗi chuỗi, mà không biết từ đó dài bao lâu hoặc chuỗi dài bao nhiêu.

điều gì đó tương tự;

array.each{|string| puts string.fetch(" ", last) 

Trả lời

26

này nên chỉ làm việc tốt

"my random sentence".split.last # => "sentence" 

để loại trừ dấu chấm câu, delete

"my rando­m sente­nce..,.!?".­split.last­.delete('.­!?,') #=> "sentence" 

Để có được "những lời cuối cùng" như một mảng từ một mảng bạn collect

["random sentence...",­ "lorem ipsum!!!"­].collect { |s| s.spl­it.last.delete('.­!?,') } # => ["sentence", "ipsum"] 
+0

Tuyệt vời, tôi đã đi đúng hướng. Cảm ơn! – BSG

+1

Tôi muốn thêm rằng bạn có thể cung cấp dấu phân cách cho hàm tách. Mặc định, hàm sử dụng khoảng trắng, nhưng bạn có thể muốn chia nhỏ một thứ khác, như dấu gạch chéo hoặc dấu gạch ngang. Tham khảo: http://ruby-doc.org/core-2.2.0/String.html#method-i-split –

3
array_of_strings = ["test 1", "test 2", "test 3"] 
array_of_strings.map{|str| str.split.last} #=> ["1","2","3"] 
1
["one two",­ "thre­e four five"­].collect { |s| s.spl­it.last } 
=> ["two", "five"] 
1

"a string of words!".match(/(.*\s)*(.+)\Z/)[2] #=> 'words!' bắt từ khoảng trắng cuối cùng trên. Điều đó sẽ bao gồm dấu chấm câu.

Để trích xuất từ ​​một mảng các chuỗi, sử dụng nó với thu thập:

["a string of words", "Something to say?", "Try me!"].collect {|s| s.match(/(.*\s)*(.+)\Z/)[2] } #=> ["words", "say?", "me!"]

0

Đây là cách đơn giản nhất tôi có thể nghĩ đến.

hostname> irb 
irb(main):001:0> str = 'This is a string.' 
=> "This is a string." 
irb(main):002:0> words = str.split(/\s+/).last 
=> "string." 
irb(main):003:0> 
Các vấn đề liên quan