Python - 正则表达式匹配url与mongo对象id

时间:2015-05-31 16:33:07

标签: python regex

我正在尝试编写与以下格式的网址匹配的正则表达式:

/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

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

这样做(考虑24个十六进制字符),在字符串之前使用raw关键字,所以不需要使用双斜线转义:

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']

答案 1 :(得分: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)

如果你想让整个事情不区分大小写。