Сначала я бы разделил на --
, чтобы каждый кусок содержал 1 продукт и 1 serial_number. Затем используйте регулярные выражения для извлечения соответствующих данных из каждого куска:
output = 'S: Product=EHCI Host Controller\nS: SerialNumber=0000:00:3d.0\n--\nS: Product=HP Truevision HD\nS: SerialNumber=201001010001\n--\nS: Product=xHCI Host Controller\nS: SerialNumber=0000:00:16.0\n--\nS: Product=iPhone\nS: SerialNumber=1d19427ba66fd77d12a836593af57c21c993f0c9\n--\nS: Product=xHCI Host Controller\nS: SerialNumber=0000:00:16.0\n'
output
|> List.to_string()
|> String.split("--")
|> Enum.map(fn chunk ->
[_, product] = Regex.run(~r/Product=(.+)/, chunk)
[_, serial_number] = Regex.run(~r/SerialNumber=(.+)/, chunk)
%{product: product, serial_number: serial_number}
end)
|> IO.inspect
Выход:
[
%{product: "EHCI Host Controller", serial_number: "0000:00:3d.0"},
%{product: "HP Truevision HD", serial_number: "201001010001"},
%{product: "xHCI Host Controller", serial_number: "0000:00:16.0"},
%{
product: "iPhone",
serial_number: "1d19427ba66fd77d12a836593af57c21c993f0c9"
},
%{product: "xHCI Host Controller", serial_number: "0000:00:16.0"}
]