2016-12-04 34 views
-1

へのキーワードは、理想的な出力がのpython - 文字列の抽出REリスト

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

が今、明らかに間違って私の未熟さを与えられた正規表現を使用してイムだろう従わ

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

として文字列を持った後、再...

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

その後、私は数字に一致するまで日付を抽出します。 "値"に似ています。 2つのre.finall()を圧縮してリストを作成します。

results = zip(dt, value) 

主なことはわかりませんがRE表現ですが、どこにでもコメントしてもらえますので、事前に感謝してください!

+0

あなたはSTRING'が文字列である '意味しますか? –

+0

jsonやpython辞書から出力されますか? –

+0

はい文字列型です –

答えて

1

また、この例のように、astモジュールからliteral_evalを使用することができます。

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とvalueの出現回数が多い文字列の場合、正常な動作をする正規表現は"datetime":(.*?Z)です。

もう1つの解決策は、この文字列が適切なJson文字列である場合はJsonを使用することです。 Pythonには、使用できるjsonモジュールが組み込まれています。

これはオブジェクトの一部のように見えますが、辞書です。これが当てはまる場合は、辞書のキーをループして値のディレクトリを取得するだけです。

0

または理解を使用することができます。一度にコンテンツとフィルタリングを反復処理:私はあなたのstring変数は文字列型であることを前提としてい

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 
関連する問題