長さと内容が異なる文字列の配列があります。
今、私はその単語の長さや文字列の長さを知らなくても、各文字列から最後の単語を抽出する簡単な方法を探しています。
何かのようなもの;
array.each{|string| puts string.fetch(" ", last)
長さと内容が異なる文字列の配列があります。
今、私はその単語の長さや文字列の長さを知らなくても、各文字列から最後の単語を抽出する簡単な方法を探しています。
何かのようなもの;
array.each{|string| puts string.fetch(" ", last)
これは問題なく動作するはずです
"my random sentence".split.last # => "sentence"
句読点を除外するにはdelete
、
"my random sentence..,.!?".split.last.delete('.!?,') #=> "sentence"
配列から「最後の単語」を配列として取得するには、collect
["random sentence...", "lorem ipsum!!!"].collect { |s| s.split.last.delete('.!?,') } # => ["sentence", "ipsum"]
array_of_strings = ["test 1", "test 2", "test 3"]
array_of_strings.map{|str| str.split.last} #=> ["1","2","3"]
"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!"]
["one two", "three four five"].collect { |s| s.split.last }
=> ["two", "five"]
これらすべてのソリューションの問題は、単語を区切るためのスペースのみを考慮していることです。正規表現を使用すると、単語以外の文字を単語の区切り文字としてキャプチャできます。これが私が使用するものです:
str = 'Non-space characters, like foo=bar.'
str.split(/\W/).last
# "bar"
これは私が考えることができる最も簡単な方法です。
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>