###前提・実現したいこと
(クオーテーションで囲まれてない)不正なJSONデータを整形しようとしてます。
{title:走れメロス,author:太宰治,characters:[メロス,セリヌンティウス,ディオニス王]}
を
{"title":"走れメロス","author":"太宰治","characters":["メロス","セリヌンティウス","ディオニス王"]}
に整形したい
###発生している問題・エラーメッセージ
空マッチが生じてしまい、うまくいきません。
>>> print(re.sub(r'([^{}[]:,]*)', '"\1"', s)) ""{"":"","":"","":""["","",""]""}""
re.findall(r'([^{}[]:,]*)', s)の結果が
['', 'title', '', '走れメロス', '', 'author', '', '太宰治', '', 'characters', '', '', 'メロス', '', 'セリヌンティウス', '', 'ディオニス王', '', '', '']となってしまい、''
の空マッチ({}[]:,に応じた部分)が余分に抽出されてしまいます。
['title', '走れメロス', 'author', '太宰治', 'characters', 'メロス', 'セリヌンティウス', 'ディオニス王']
みたいな感じを想定していたので、所期の目的を達成するには、どのようにすれば良いでしょうか?あるいは不正なJSONもよしなにパースしてくれるライブラリとか
###該当のソースコード
python
1import re 2s = '{title:走れメロス,author:太宰治,characters:[メロス,セリヌンティウス,ディオニス王]}' 3print(re.sub(r'([^{}[]:,]*)', '"\1"', s)) 4#->""{"":"","":"","":""["","",""]""}"" 5print(re.findall(r'([^{}[]:,]*)', s)) 6#->['', 'title', '', '走れメロス', '', 'author', '', '太宰治', '', 'characters', '', '', 'メロス', '', 'セリヌンティウス', '', 'ディオニス王', '', '', '']
###補足情報(言語/FW/ツール等のバージョンなど)
python 3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/30 03:31