我有一系列不同长度和内容的字符串。
现在我正在寻找一种简单的方法来从每个字符串中提取最后一个单词,而不知道该单词的长度或字符串的长度。
像某样的东西;array.each{|string| puts string.fetch(" ", last)
答案 0 :(得分:27)
这应该可以正常使用
"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"]
答案 1 :(得分:3)
array_of_strings = ["test 1", "test 2", "test 3"]
array_of_strings.map{|str| str.split.last} #=> ["1","2","3"]
答案 2 :(得分:1)
["one two", "three four five"].collect { |s| s.split.last }
=> ["two", "five"]
答案 3 :(得分: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!"]
答案 4 :(得分: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>
答案 5 :(得分:0)
所有这些解决方案的问题在于您只考虑用于单词分隔的空格。使用正则表达式,您可以将任何非单词字符捕获为单词分隔符。这是我使用的:
str = 'Non-space characters, like foo=bar.'
str.split(/\W/).last
# "bar"