kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 ohho
ohho
Вопрос

Как разделить строку на две части по последнему вхождению символа split?

Например:

"Angry Birds 2.4.1".split(" ", 2)
 => ["Angry", "Birds 2.4.1"] 

Как я могу разделить строку на: ["Angry Birds", "2.4.1"].

45 2012-08-30T07:56:09+00:00 8
Программирование
ruby
Решение / Ответ
Vadym Tyemirov
Vadym Tyemirov
29-го ноября 2013 в 8:50
2013-11-29T08:50:19+00:00
Дополнительно
Источник
Редактировать
#17081930

Строка#rpartition, например

irb(main):068:0> str = "Angry Birds 2.4.1"
=> "Angry Birds 2.4.1"
irb(main):069:0> str.rpartition(' ')
=> ["Angry Birds", " ", "2.4.1"]

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

irb(main):073:0> str.rpartition(' ').first
=> "Angry Birds"
irb(main):074:0> str.rpartition(' ').last
=> "2.4.1"
90
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 halfelf
halfelf
30-го августа 2012 в 8:20
2012-08-30T08:20:57+00:00
Дополнительно
Источник
Редактировать
#17081927

У меня есть подобное решение:

class String
  def split_by_last(char=" ")
    pos = self.rindex(char)
    pos != nil ? [self[0...pos], self[pos+1..-1]] : [self]
  end
end

"Angry Birds 2.4.1".split_by_last  #=> ["Angry Birds", "2.4.1"]
"test".split_by_last               #=> ["test"]
 halfelf
halfelf
Редактировал ответ 30-го августа 2012 в 8:44
9
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 oldergod
oldergod
30-го августа 2012 в 8:15
2012-08-30T08:15:07+00:00
Дополнительно
Источник
Редактировать
#17081926

Может быть, что-то вроде этого? Сплит, где за пробелом следует что угодно, кроме пробела, до конца строки.

"Angry Birds 2.4.1".split(/ (?=\S+$)/)
#=> ["Angry Birds", "2.4.1"]
 oldergod
oldergod
Редактировал ответ 5-го сентября 2019 в 6:14
8
0
 sumskyi
sumskyi
30-го августа 2012 в 8:04
2012-08-30T08:04:01+00:00
Дополнительно
Источник
Редактировать
#17081925

"Angry Birds 2.4.1".split(/ (?=\d+)/).

2
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 matthew.tuck
matthew.tuck
30-го августа 2012 в 9:54
2012-08-30T09:54:37+00:00
Дополнительно
Источник
Редактировать
#17081929

Это, наверное, слишком сложно (и, наверное, не особенно эффективные), но вы можете сделать это:

"Angry Birds 2.4.1".reverse.split(" ", 2).map(&:reverse).reverse
2
0
 jsarma
jsarma
21-го апреля 2014 в 6:32
2014-04-21T18:32:07+00:00
Дополнительно
Источник
Редактировать
#17081931

В rpartition решение делает большой сексуальный один-лайнер (я за нее голосовал), но здесь'с другой методики, если вы хотите один лайнер, что's более гибкой для решения более сложных разделов проблемы:

["Angry Birds 2.4.1".split(' ')[0..-2].join(' '), "Angry Birds 2.4.1".split(' ')[-1..-1].join(' ')]

Более гибкий, я имею в виду, если бы было больше пунктов секционирования, можно просто регулировать диапазон последовательности.

 jsarma
jsarma
Редактировал ответ 8-го февраля 2018 в 2:41
2
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
 pvandenberk
pvandenberk
27-го апреля 2015 в 5:36
2015-04-27T17:36:58+00:00
Дополнительно
Источник
Редактировать
#17081932

Я не'т, кажется, в состоянии получить пример кода в мой комментарий правильно отформатировать, поэтому я'м представив его в качестве отдельного ответа, хотя Вадим Tyemirov заслуживает всех кредит на строку#rpartition решение он предоставил выше.

Я просто хотела добавить, что строка#rpartition играет очень красиво с Ruby'ы "и Дон'т волнует, что" variable, как обычно вы'вновь действительно интересует только первый и последний элемент в результирующий массив, а не элемент (сепаратор):

в

[1] pry(main)> name, _, version = "Angry Birds 2.4.1".rpartition(' ')
=> ["Angry Birds", " ", "2.4.1"]
[2] pry(main)> name
=> "Angry Birds"
[3] pry(main)> version
=> "2.4.1"

Так что не надо за массив#первый или `массив#последние... меньше-это больше! :-)

 Community
Community
Редактировал ответ 23-го мая 2017 в 11:54
1
0
Jing Li
Jing Li
30-го августа 2012 в 8:26
2012-08-30T08:26:40+00:00
Дополнительно
Источник
Редактировать
#17081928
class String
  def divide_into_two_from_end(separator = ' ')
    self.split(separator)[-1].split().unshift(self.split(separator)[0..-2].join(separator))
  end
end

"Angry Birds 2.4.1".divide_into_two_from_end(' ') #=> ["Angry Birds", "2.4.1"]
0
0
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
Похожие сообщества 6
Чат по Руби
Чат по Руби
2 366 пользователей
Чат-болталка для учеников руби-школы и не только. Сайт школы: https://rubyschool.us Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-06-10 или тут https://graph.org/Pravila-chata-Rubi-shkoly-06-10
Открыть telegram
RubyRush.ru
RubyRush.ru
2 251 пользователей
Дружелюбный чат для начинающих программистов и учеников rubyrush.ru, обсуждаем программирование, ruby и т. п. Правила чата https://telegra.ph/22-09-05-3 Популярные вопросы (с ответами) https://telegra.ph/22-09-17-4 💎🦜 (уроки: https://rubyrush.ru/steps)
Открыть telegram
pro.rb (Ruby/Rails / RU)
pro.rb (Ruby/Rails / RU)
1 209 пользователей
Язык программирования Ruby: https://ru.wikipedia.org/wiki/Ruby Вакансии: @rubyjob
Открыть telegram
Ruby — вакансии и аналитика
Ruby — вакансии и аналитика
384 пользователей
Публикуем вакансии и запросы на поиск работы по направлению Ruby. Full-time, part-time, remote и разовые подработки. Обмен инсайдами и аналитикой на рынке труда. Тематическое общение: @ruby_ru См. также: @python_jobs, @nodejs_jobs, @devops_jobs
Открыть telegram
Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
301 пользователей
Открыть telegram
Ruby Talks
Ruby Talks
238 пользователей
Национальная Флеймотека
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Andrei Kalinin
Зарегистрирован 2 недели назад
2
Koroleva Ego
Зарегистрирован 1 месяц назад
3
Star Lenon
Зарегистрирован 1 месяц назад
4
Данил Жевнеров
Зарегистрирован 1 месяц назад
5
Анна Литвиненко
Зарегистрирован 2 месяца назад
Хотите что-то узнать? Задавайте Ваш вопрос на нашем сайте
ru.kzen.dev
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией