我正在尝试编写与以下格式的网址匹配的正则表达式:
/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
感谢任何帮助。
答案 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)
如果你想让整个事情不区分大小写。