2013-03-07 59 views
0

我有一系列執行路徑作爲json文件中的字段。文件中的每一行代表一個記錄和文件的線結構如下:正則表達式刪除JSON文件中的部分文件名

"2596192":[{"jobID":"2596192","account":"TG-MCB110136","user":"px","pkgT":{"mkl/10.0":{"libA": 
    ["libmkl_lapack.so"],"flavor":["default"]}},"startEpoch":"1338439337","runTime":"1337","execType":"use r:binary","exec":"/work/01779/plsawle/amber/amber10/bin/sander.MPI","numNodes":"1","sha1":"1f28c333d0f1534ffd8c67c26edff917d7980e48","execEpoch":1313768808,"execModify":"Fri Aug 19 10:46:48 2011","startTime":"Wed May 30 23:42:17 2012","numCores":"16","sizeT":{"bss":"82704936","text":"5722390","data":"489580"}}], 

正如你可以看到,在「執行」現場的執行路徑是完全合格的路徑;然而,我想用正則表達式來刪除路徑的開頭,並保存他的可執行文件的實際名稱。例如,代替...

"exec":"/work/01779/plsawle/amber/amber10/bin/sander.MPI" 

我想領域是...

"exec":sander.MPI 

由於每個EXEC值的長度是任意的,是「/」中的數路徑,我不確定如何構建正則表達式來進行此轉換。有人可以推薦一個解決方案嗎?謝謝!

+0

您使用哪種語言?有不同的正則表達式。 – 2013-03-07 03:19:52

+0

我使用的是使用標準grep的textWrangler。 – amber4478 2013-03-07 03:21:50

回答

0

下面的正則表達式只會匹配可執行文件名稱

[^/]+(?:\.\w+)?$ 

樣品與使用JavaScript對象

var obj = { exec : "/work/01779/plsawle/amber/amber10/bin/sander.MPI" }; 
var execName = obj.exec.match(/[^/]+(?:\.\w+)?$/i); 

編輯

,我沒有意識到你我們通過解析一個完整的JSON文件,你需要以下正則表達式

("exec":").+?([^/]+?(?:\.\w+)?") 

我不熟悉textWrangler,但通常您會用$1$2\1\2替換。

如果您的文本編輯器支持正則表達式(lookahead和lookbehind斷言),您可以使用以下正則表達式並用空字符串替換。

(?<="exec":").+?(?=[^/]+?(?:\.\w+)?") 
+0

我剛剛通過json文件運行了上述內容,但未找到任何匹配項。另外並非所有的可執行文件都有文件擴展名。有些只是一個名字, – amber4478 2013-03-07 03:22:59

+0

更新爲不處理擴展名exec。我沒有意識到我們正在嘗試解析json文件並替換值。 – 2013-03-07 03:28:54

+0

我對Javascript並不熟悉,也不知道如何讀取和寫入文件。我只想刪除json文檔中完整路徑的開頭並重新保存它。 – amber4478 2013-03-07 03:30:35