Извлечь последнее слово в предложении / строке? - PullRequest
12 голосов
/ 02 марта 2012

У меня есть массив строк различной длины и содержания.

Теперь я ищу простой способ извлечь последнее слово из каждой строки, не зная, как долго это слово или как долгострока.

что-то вроде;

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

Ответы [ 6 ]

28 голосов
/ 02 марта 2012

Это должно работать просто отлично

"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"]
3 голосов
/ 02 марта 2012
array_of_strings = ["test 1", "test 2", "test 3"]
array_of_strings.map{|str| str.split.last} #=> ["1","2","3"]
1 голос
/ 02 марта 2012

"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!"]

1 голос
/ 02 марта 2012
["one two",­ "thre­e four five"­].collect { |s| s.spl­it.last }
=> ["two", "five"]
0 голосов
/ 06 апреля 2018

Проблема со всеми этими решениями заключается в том, что вы рассматриваете только пробелы для разделения слов. Используя регулярные выражения, вы можете захватить любой несловесный символ в качестве разделителя слов. Вот что я использую:

str = 'Non-space characters, like foo=bar.'
str.split(/\W/).last
# "bar"
0 голосов
/ 02 марта 2012

Это самый простой способ, о котором я могу думать.

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> 
...