2016-04-25 6 views
-2

ich eine Datei extrahieren möchten, sollte es mit [{"linkId":"changeDriveLink" und Finish durch einen Text beginnen gerade vor dem ,"zone"regex mit Python

meine Eingabe ist:

[{"linkIdsd":"changeDridsdve [{"linkId":"changeDriveLink","url":"/drive 
/3696434","zoneId":"forceAjax"},{"linkId":"printProductsFormSubst","url":"/drive/rayon.pagetemplate.substitutionlist.printproductsformsubst","zoneId":"forc 
,"zone" 

und ich möchte haben:

[{"linkId":"changeDriveLink","url":"/drive 
    /3696434","zoneId":"forceAjax"},{"linkId":"printProductsFormSubst","url":"/drive/rayon.pagetemplate.substitutionlist.printproductsformsubst","zoneId":"forc 

Wie kann ich dies durch Regex bitte tun?

+0

lesen Bitte geben Sie eine [MCVE] (http://stackoverflow.com/help/mcve) Probe Ihrer json Eingabe. – gdlmx

+0

danke, ich habe meine Frage bearbeitet, – parik

Antwort

1

Der reguläre Ausdruck

re.compile(r'^\[\{"linkId":"changeDriveLink".*,"zone"', re.DOTALL) 

sollte dies tun. Die .* in der Mitte stellt jedes Zeichen dar, und die re.DOTALL stellt sicher, dass sogar Zeilenumbrüche übereinstimmen, falls Ihr json hübsch gedruckt ist.

Aber ich denke, es wäre besser, die Datei mit dem json Paket zu laden, und dann prüfen, ob es Ihre Anforderungen erfüllt:

import json 

with open('filename_here.json', 'r') as json_file: 
    data = json.load(json_file) 

if data[0]['linkId'] == 'changeDriveLink': 
    # then its OK 
else: 
    # not OK 

Basierend auf der Zeichenfolge, die Sie gegeben haben, Ihre json ist ein list (Array), und sein erstes Element ist ein dict, und der dict hat einen 'linkId' Schlüssel mit dem Wert 'changeDriveLink'. Das ist, was ich in der if Anweisung überprüfe.

EDIT:

Jetzt verstehe ich, was Sie tun wollen. Zuerst sollten Sie den ^ Character vom Anfang des Ausdrucks weglassen, da die von Ihnen angegebene Zeichenfolge nicht der Anfang der JSON-Datei ist, sondern der Anfang des Ergebnisses. Dann können Sie die gewünschte Zeichenfolge mit z. Gruppierung:

Was ich hier verwendet wird, genannt Gruppierung genannt, können Sie mehr über in den documentation

+0

danke, ich weiß, wie extrahieren json, mein Problem ist Regex, ich habe Ihren regulären Ausdruck getestet, aber es funktioniert nicht – parik

+1

könnten Sie einige Beispiel-JSON-Dateien zur Verfügung stellen? – matekatona

+0

Hallo Máté, ich füge den Eingang und den Ausgang, die ich brauche, danke – parik

2

IMHO, verwenden Sie das json Paket und Suche in der Struktur ist besser als das Schreiben einer komplexen Regex, die unlesbar und ziemlich schwer zu debuggen sein wird.

Sie können diesen Beitrag (Parsing json and searching through it) für weitere Ideen besuchen.