2016-04-25 83 views
-2

我想提取一個文件,它應該[{"linkId":"changeDriveLink"和完成由文本開始只是befor ,"zone"正則表達式使用Python

我輸入的是:

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

,我想有:

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

我怎麼可以通過正則表達式做到這一點嗎?

+0

在閱讀更多關於請提供[MCVE(http://stackoverflow.com/help/mcve)樣本你的json輸入。 – gdlmx

+0

,謝謝,我編輯我的問題,謝謝 – parik

回答

1

正則表達式

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

應該這樣做。中間的.*表示任何字符,並且re.DOTALL可以確保即使換行符匹配,以防萬一您的json被打印出來。

但我認爲它會更好,加載與json包中的文件,然後檢查是否滿足您的要求:

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 

根據您所提供的字符串,你JSON是一種list(陣列),和它的第一個元素是一個dict,並且dict具有與值'changeDriveLink'一個'linkId'鍵。這是我在if聲明中檢查的內容。

編輯:

現在我明白了,你想要做什麼。 首先,你應該忽略從表達的beggining的^ charachter,因爲您提供的字符串不是JSON文件的開始,它應該是結果的開始。 然後,你可以得到你想要的字符串,例如分組:

我這裏使用的是被稱爲命名爲分組,您可以在documentation

+0

,我知道提取JSON怎麼樣,我的問題是正則表達式,我測試你的正則表達式,但它deosn't工作 – parik

+1

你能提供一些示例JSON文件? – matekatona

+0

嗨馬特,我添加輸入和我需要的輸出,謝謝 – parik