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
["one two",­ "thre­e four five"­].collect { |s| s.spl­it.last }
=> ["two", "five"]
于 2012-03-02T13:53:09.917 回答
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

所有这些解决方案的问题在于您只考虑空格来分隔单词。使用正则表达式,您可以捕获任何非单词字符作为单词分隔符。这是我使用的:

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 回答