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

i_t*_*ope 1 python regex

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

/api/v1/users/<mongo_object_id>/submissions
Run Code Online (Sandbox Code Playgroud)

mongo_object_id的示例是556b352f87d4693546d31185.我已经制作了以下模式,但它似乎不起作用.

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

任何帮助表示赞赏.

Rod*_*pez 6

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

r'\/api\/v1\/users\/([a-f\d]{24})\/submissions'
Run Code Online (Sandbox Code Playgroud)

Python控制台:

>>> re.findall(r'\/api\/v1\/users\/([a-f\d]{24})\/submissions','/api/v1/users/556b352f87d4693546d31185/submissions')
['556b352f87d4693546d31185']
Run Code Online (Sandbox Code Playgroud)


Fun*_*uit 5

它看起来像一个对象的ID是一个十六进制数字,这意味着它匹配的东西就像这样简单:

[0-9a-f]+
Run Code Online (Sandbox Code Playgroud)

如果你想确保它总是24个字符:

[0-9a-f]{24}
Run Code Online (Sandbox Code Playgroud)

在斜杠之间折腾:

/api/v1/users/([0-9a-f]{24})/submissions
Run Code Online (Sandbox Code Playgroud)

它应该工作.

注意:您可能有逃避斜线,这取决于Python的正则表达式是如何工作的语法.如果我没记错的话,你可以这样做:

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

要么

re.findall(r'/api/v1/users/([0-9a-f]{24})/submissions', url, re.I)
Run Code Online (Sandbox Code Playgroud)

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