2017-05-14 48 views
-2

我不熟悉正則表達式,有人可以幫我用這個例子嗎? 我有蟒蛇API調用輸出JSON,JSON的是這樣的:我如何從正則表達式得到一個字符串python

{ 
    "key": "/my/task/ca4e0240d6ce447554f805e118928", 
    "key2": "values" 
} 

如何使用重新找到在這種情況下ca4e0240d6ce447554f805e118928

在此先感謝!

+0

你不應該使用正則表達式來解析Json。 –

回答

2

你不需要正則表達式這一點,你需要basename解壓路徑分隔字符串中最右邊部分:

import os 

d = { 
    "key": "/my/task/ca4e0240d6ce447554f805e118928", 
    "key2": "values" 
} 

print(os.path.basename(d["key"])) 

結果:

ca4e0240d6ce447554f805e118928 

(注意,這也適用於Windows ,即使標準路徑分隔符是\

替代方式(仍然沒有正則表達式),使用str.rpartition

print(d["key"].rpartition("/")[2]) 

正則表達式:刪除之前的所有斜線斜線(貪婪):

print(re.sub(".*/","",d["key"])) 
0

您還可以使用str.split()有這樣的例子所需輸出:

a = { 
    "key": "/my/task/ca4e0240d6ce447554f805e118928", 
    "key2": "values" 
} 

print(a["key"].split("/")[-1]) 

或者,如果您輸出將同時具有'/'和/或'\',您可以使用這樣的lambda函數:

get_string = lambda x: x["key"].split("/")[-1] if '/' in x["key"] else x["key"].split("\\")[-1] 

print(get_string(a)) 

雙方將輸出:

'ca4e0240d6ce447554f805e118928' 
0

你可以做到這一點,如果你堅持使用正則表達式,它會爲雙方/\工作,但是這完全沒有必要,你應使用os.path模塊:

import re 
d = { 
    "key": "/my/task/ca4e0240d6ce447554f805e118928", 
    "key2": "values" 
} 
match = re.search(r"[/|\\](\w+)$", d["key"]).groups()[0] 
print(match)