2016-12-04 3 views
-1

есть строка, как следоватьпитона - RE вытяжных строк после ключевых слов в список

string = {"name":"Peter","datetime":"2000-01-01T23:59:59Z","value":"61.77"},{...} 

идеальный выход будет

output = [(2000-01-01T23:59:59Z, 61.77),[...],...] 

прямо сейчас им, используя регулярное выражение, которое, очевидно, неправильно учитывая мою неопытность в ре ...

dt = re.findall(r"datetime":.*?(Z)) 

После этого я извлечет дату по номерам, пока она не совпадает с Z. Аналогично для "value". Занесение в список путем zip двух re.finall().

results = zip(dt, value) 

Главное им не уверены является RE выражения, но не стесняйтесь комментировать в любом месте вы посчитаете нужным, заранее спасибо!

+0

ли вы имеете в виду 'string' является строкой? –

+0

- это вывод из json или python dictionary? –

+0

Да, это строковый тип –

ответ

1

Я предполагаю, что ваша string переменная строкового типа.

Вы можете также использовать literal_eval из ast модуля, как в этом примере:

from ast import literal_eval 

string = '{"name":"Peter","datetime":"2000-01-01T23:59:59Z","value":"61.77"},{"name":"Peter","datetime":"2000-01-01T24:59:59Z","value":"68.00"}' 
output = [(i["datetime"], i["value"]) for i in literal_eval(string)] 

print(output) 

Выход:

[('2000-01-01T23:59:59Z', '61.77'), ('2000-01-01T24:59:59Z', '68.00')] 
0

Если это строка, которая содержит много таких вхождений даты и времени, вот регулярное выражение, которое должно работать: "datetime":(.*?Z).

Другим решением является использование Json, если эта строка является правильной строкой Json. Python имеет встроенный модуль json, который вы можете использовать.

Это похоже на часть предмета, хотя словарь. Если это так, вы можете просто перебрать ключи словаря и получить каталог значений.

0

или вы могли бы воспользоваться пониманием. Перебор содержимого и фильтрации на одном дыхании:

string = {"name":"Peter","datetime":"2000-01-01T23:59:59Z","value":"61.77"},{"name":"Peter2","datetime":"2000-02-01T23:59:59Z","value":"61.77"} 
findDateTime = "2000-01-01T23:59:59Z" 
output = [(line['datetime'], line['value']) for line in string if line['datetime'] == findDateTime] 
print output 
Смежные вопросы