2015-05-31 38 views
1

我想寫以下格式的URL匹配的正則表達式網址:Python的 - 正則表達式來匹配蒙戈對象ID

/api/v1/users/<mongo_object_id>/submissions 

凡mongo_object_id的一個例子是556b352f87d4693546d31185。 我已經制作了以下模式,但似乎並不奏效。

/api/v1/users\\/(?=[a-f\\d]{24}$)(\\d+[a-f]|[a-f]+\\d)\\/submissions 

任何幫助表示讚賞。

+3

你能舉個'mongo_object_id'的例子嗎? – apgp88

+0

556b352f87d4693546d31185(也在帖子中加入) –

+0

請刪除標題中的標記。請參閱[這個問題](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles)瞭解更多信息。 –

回答

5

這樣做(考慮24個進制字符),使用原始關鍵字字符串之前,所以沒有必要用雙斜線逃脫

r'\/api\/v1\/users\/([a-f\d]{24})\/submissions' 

的Python控制檯:

>>> re.findall(r'\/api\/v1\/users\/([a-f\d]{24})\/submissions','/api/v1/users/556b352f87d4693546d31185/submissions') 
['556b352f87d4693546d31185'] 
+0

出於好奇,你爲什麼要做一個超前的比賽? –

+0

我只是修復原來的正則表達式,但在這一點上並不清楚,但它沒有什麼意義,謝謝反饋。實際上,使用24字符以上的lookahead解決方案會失敗 –

5

它看起來像一個對象ID是一個十六進制數字,這意味着它被如此簡單的東西匹配:

[0-9a-f]+ 

如果你要確保它總是24個字符:

[0-9a-f]{24} 

折騰了斜槓之間:

/api/v1/users/([0-9a-f]{24})/submissions 

,它應該工作。

注意:您的可能必須轉義斜線,這取決於Python的正則表達式語法的工作方式。如果我沒記錯的話,你可以這樣做:

import re 
re.findall(r'/api/v1/users/([0-9a-f]{24})/submissions', url) 

re.findall(r'/api/v1/users/([0-9a-f]{24})/submissions', url, re.I) 
如果你想使整個事情不區分大小寫