2015-05-31 39 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) 
如果你想使整个事情不区分大小写