2013-12-06 6 views
0

Я не могу получить регулярное выражение, чтобы разделить строку, чтобы дать желаемый результат. http://rubular.com/r/ytFwP3ivAv - в соответствии с rubular это выражение должно работать.Разделение одной строки хэшей в массив хэшей

str = "{"DATE"=>"11/26/2013 11:15", "DESC"=>"Accident (minor)", "LOCATION"=>"12 S THORNTON AV", "DISTRICT"=>"C5", "INCIDENT"=>"2013-00496193"}, {"DATE"=>"11/26/2013 11:10", "DESC"=>"Hold-up alarm", "LOCATION"=>"4725 S KIRKMAN RD", "DISTRICT"=>"E5", "INCIDENT"=>"2013-00496235"}" 

sub_str_array = str.split(/({"[\w"=>\/ :,()-]*})/) 

# the desired result - each hash is an element in an array 
puts the_split[0] #=> {"DATE"=>"11/26/2013 11:15", "DESC"=>"Accident (minor)", "LOCATION"=>"12 S THORNTON AV", "DISTRICT"=>"C5", "INCIDENT"=>"2013-00496193"} 

Есть еще один способ (простой способ), чтобы преобразовать эти строки хэш в массив хэш?

+0

'str' не объект типа String. Это Хэш-объект. – falsetru

+0

@falsetru, я изменил его на объект String. Благодарю. – Eli

+0

'str' - неверное определение строки. Попробуйте в IRB. –

ответ

2

Вы можете использовать это:

require 'json' 

yourstr = '[' + '{"DATE"=>"11/26/2013 11:15", "DESC"=>"Accident (minor)", "LOCATION"=>"12 S THORNTON AV", "DISTRICT"=>"C5", "INCIDENT"=>"2013-00496193"}, {"DATE"=>"11/26/2013 11:10", "DESC"=>"Hold-up alarm", "LOCATION"=>"4725 S KIRKMAN RD", "DISTRICT"=>"E5", "INCIDENT"=>"2013-00496235"}, {"DATE"=>"11/26/2013 11:08", "DESC"=>"Missing person - adult", "LOCATION"=>"4818 S SEMORAN BV 503", "DISTRICT"=>"K1", "INCIDENT"=>"2013-00496198"}, {"DATE"=>"11/26/2013 11:07", "DESC"=>"911 hang up", "LOCATION"=>"311 W PRINCETON ST", "DISTRICT"=>"C2", "INCIDENT"=>"2013-00496231"}' + ']' 

my_hash = JSON.parse(yourstr.gsub("=>", ":")) 

puts my_hash[0] 
0

Вы установили str как объект. Оберните его в кавычки, и он должен работать.

Возможно, лучше использовать %Q(string goes here), а не двойные кавычки.

+0

Теперь это объект String. Тем не менее, регулярное выражение не может захватить каждый хеш - см. Выше рублевую ссылку. – Eli

0

Вы можете использовать eval "[#{str}]", если str жестко запрограммирован, и никто не может его изменить.

+0

К сожалению, он не жестко закодирован. Он выводится из файла, который необходимо преобразовать. – Eli

+1

Вы хотите разделить эту строку в массиве строк или массиве хэшей? во втором случае вы должны перебирать каждый элемент массива. Eval может быть опасным, но зависит от того, кто генерирует этот файл. – michelemina

Смежные вопросы