15

長さと内容が異なる文字列の配列があります。

今、私はその単語の長さや文字列の長さを知らなくても、各文字列から最後の単語を抽出する簡単な方法を探しています。

何かのようなもの;

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

6 に答える 6

34

これは問題なく動作するはずです

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

句読点を除外するにはdelete

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

配列から「最後の単語」を配列として取得するには、collect

["random sentence...",­ "lorem ipsum!!!"­].collect { |s| s.spl­it.last.delete('.­!?,') } # => ["sentence", "ipsum"]
于 2012-03-02T13:42:43.090 に答える
3
array_of_strings = ["test 1", "test 2", "test 3"]
array_of_strings.map{|str| str.split.last} #=> ["1","2","3"]
于 2012-03-02T13:46:06.643 に答える
1

"a string of words!".match(/(.*\s)*(.+)\Z/)[2] #=> 'words!' 上の最後の空白からキャッチします。これには句読点が含まれます。

文字列の配列からそれを抽出するには、collectで使用します。

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

于 2012-03-02T14:02:12.293 に答える
1
["one two",­ "thre­e four five"­].collect { |s| s.spl­it.last }
=> ["two", "five"]
于 2012-03-02T13:53:09.917 に答える
1

これらすべてのソリューションの問題は、単語を区切るためのスペースのみを考慮していることです。正規表現を使用すると、単語以外の文字を単語の区切り文字としてキャプチャできます。これが私が使用するものです:

str = 'Non-space characters, like foo=bar.'
str.split(/\W/).last
# "bar"
于 2018-04-06T13:37:51.647 に答える
0

これは私が考えることができる最も簡単な方法です。

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> 
于 2012-03-02T14:19:56.060 に答える