Вы можете использовать регулярное выражение для анализа вашего текста:
str = "Title: My Treatise on Kumquats
Author: Joe Schmoe
Author URL: http://somedudeswebsite.me/
Host URL: http://googlesnewthing.com/
Created: 2012-01-01 09:41"
matches = str.scan /^(.+?): (.+?)$/m
matches.each { |m|
key = m[0]
value = m[1]
}
Это регулярное выражение с несколькими строками (/<regex>/m
) - каждая строка будет сопоставляться в две группы (с индексами 0 и 1).Первая группа будет содержать все символы до первого вхождения ": "
(двоеточие + пробел).Вторая группа будет содержать все остальные символы в этой строке (до тех пор, пока регулярное выражение не встретит конец строки $
).
Вот как можно преобразовать результат в хэш:
dictionary = matches.inject({}) do |dict, m|
dict[m[0]] = m[1]
dict
end
ОБНОВЛЕНИЕ
Как упоминал Майкл Кол, можно написать это в одной строке:
hash = Hash[str.scan /^(.+?): (.+?)$/m]