2016-12-15 3 views
0

Je suis un regex Javascript pour réparer les objets cassés JSON-(mon arrière-plan supprime toutes les citations de la chaîne JSON, l'expression rationnelle les ajoute à nouveau).Javascript Translating regex à Python

var src = '[{ key: any text with spaces, emptykey: , foo: 0}, { key2: other text with spaces, emptykey2: , foo2: 2},]'; 

console.log(src.replace(/(\w+):(\s*)(.*?)(,|})/g, '"$1":$2"$3"$4')); 
// outputs [{ "key" : "any text with spaces", emptykey: "", "foo": "0"},...] 

Je dois traduire cette expression régulière remplacer à python, mais je ne sais pas comment inclure la partie avec des références nommées en arrière. Voici mon point de départ

import json 
    import re 

    invalid_json = '[{ key: any text with spaces, emptykey: , foo: 0}, { key2: other text with spaces, emptykey2: , foo2: 2}]' 
    result = re.sub('/(\w+):(\s*)(.*?)(,|})/g', what to do here in python?, invalid_json) 
    print result 
+1

@MohammadYusufGhazi comment pourrais-je utiliser les espaces réservés javascript 1 $ en python? – ManuKaracho

+1

Remplacer $ 1 par \\ 1 – Zaphod

+0

@ManuKaracho 'r '\ 1'' ou'' \\ '' – MYGz

Répondre

3
import json 
import re 

invalid_json = '[{ key: any text with spaces, emptykey: , foo: 0}, { key2: other text with spaces, emptykey2: , foo2: 2}]' 
result = re.sub('(\w+):(\s*)(.*?)(,|})', r'"\1":\2"\3"\4', invalid_json) 
print result 
print json.loads(result) 

Sortie:

[{ "key": "any text with spaces", "emptykey": "", "foo": "0"}, { "key2": "other text with spaces", "emptykey2": "", "foo2": "2"}] 
[{u'emptykey': u'', u'foo': u'0', u'key': u'any text with spaces'}, {u'key2': u'other text with spaces', u'emptykey2': u'', u'foo2': u'2'}]