我正在尝试编写与以下格式的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)
任何帮助表示赞赏.
这样做(考虑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)
它看起来像一个对象的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)
如果你想让整个事情不区分大小写.