re = /(\w+)=(\[.*?]|{.*?}|\S+)(?=\s*,\s*\w+=|$)/m
str = 'names=[\'m\',\'c\'], nmodes=2, mus=[[-5.0, -5.0], [5.0, 5.0]], sigmas=[[1.5, 1.5], [2.1, 2.1]], corrcoefs=[[[1.0, -0.7], [-0.7, 1.0]], [[1.0, 0.7], [0.7, 1.0]]], covs=[[[2.25, -1.5749999999999997], [-1.5749999999999997, 2.25]], [[4.41, 3.087], [3.087, 4.41]]], weights=[1.0, 3.0], bounds={\'m\': (-inf, inf), \'c\': (-inf, inf)}'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html