У меня есть данные в текстовом формате, где пары ключ / значение отделяются точкой с запятой, может следовать пробел, может быть, нет, например, ";"или ";", или даже ";".Между парами всегда будет точка с запятой, а строка заканчивается точкой с запятой.
Ключи и значения разделяются пробелом.
Эта строка является плоской.Там никогда ничего не вкладывается.Строки всегда заключаются в кавычки, а числовые значения никогда не заключаются в кавычки.Я могу рассчитывать на то, что это будет последовательным на входеТак, например,
'cheese "stilton";pigeons 17; color "blue"; why "because I said so";'
В конечном итоге это выглядит как
{'cheese': "stilton", 'pigeons': 17, 'color': "blue"; 'why': "because I said so"}
Разные строки могут включать разные пары ключ / значение, и я заранее не знаю, какие ключи будут присутствовать,Так что это в равной степени допустимая входная строка:
mass 6.02 ; mammal "gerbil";telephone "+1 903 555-1212"; size "A1";
Я думаю, что регулярное выражение для разбиения строки на список будет хорошим началом, а затем просто переберите список по два для построения словаря.Что-то вроде
x = PATTERN.split(s)
d = {}
for i in range(0, len(x), 2):
d[x[i]] = d[x[i+1]]
, для которого требуется список типа ['cheese', 'stilton', 'голуби', 17, 'color', 'blue', 'Why', 'потому что я так сказал'],Но я не могу найти регулярное выражение, чтобы войти в эту форму.Самое близкое, что у меня есть, это
([^;[\s]*]+)
, который возвращает
['', 'cheese', ' ', '"stilton"', ';', 'pigeons', ' ', '17', '; ', 'color', ' ', '"blue"', '; ', 'why', ' ', '"because', ' ', 'I', ' ', 'said', ' ', 'so"', ';']
Конечно, достаточно просто итерировать по тройкам и выбирать пары ключ / значение и игнорировать захваченные разделители, но я 'Мне интересно, есть ли другое регулярное выражение, которое не будет захватывать разделители.Есть предложения?