匹配 url 正则表达式中的文件路径
Match file path in url regex
我需要匹配图片的路径:
images/05a813eb-df00-4ed6-b8a5-2930f03fbf5d.jpg
我按目录、名称和分机拆分它
def url(self, name):
prefix, _ = name.split('/')
file_name, ext = _.split('.')
return reverse('image_storage',
args=[prefix, file_name, ext])
所以我有 images
、05a813eb-df00-4ed6-b8a5-2930f03fbf5d
、jpg
我的 url 模式:
url(r'^img/(?P<prefix>\w+)/(?P<uuid4>[0-9a-f][0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(?P<ext>\w+)
但不匹配,请帮我找到解决方案。
您可以使用
^images/(?:(?P<prefix>\w+)/)?(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)
images/
之后的可选目录与可选组 (?:(?P<prefix>\w+)/)?
匹配。 ?
量词匹配 1 次或 0 次出现。 如果 可以超过 1,请使用 *
而不是 ?
(但我想你必须考虑正确的 "prefix" 组边界).
此外,您的正则表达式中的 [0-9a-f][0-9a-f]{8}
需要 9 个字符,但实际上有 8 个。
3 个连续的 -[0-9a-f]{4}
可以缩进另一个非捕获组 (?:-[0-9a-f]{4}){3}
.
注意:在模式前面加上 (?i)
(不区分大小写的修饰符)可能是个好主意:(?i)^images/(?:(?P<prefix>\w+)/)?(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)
我需要匹配图片的路径:
images/05a813eb-df00-4ed6-b8a5-2930f03fbf5d.jpg
我按目录、名称和分机拆分它
def url(self, name):
prefix, _ = name.split('/')
file_name, ext = _.split('.')
return reverse('image_storage',
args=[prefix, file_name, ext])
所以我有 images
、05a813eb-df00-4ed6-b8a5-2930f03fbf5d
、jpg
我的 url 模式:
url(r'^img/(?P<prefix>\w+)/(?P<uuid4>[0-9a-f][0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\.(?P<ext>\w+)
但不匹配,请帮我找到解决方案。
您可以使用
^images/(?:(?P<prefix>\w+)/)?(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)
images/
之后的可选目录与可选组 (?:(?P<prefix>\w+)/)?
匹配。 ?
量词匹配 1 次或 0 次出现。 如果 可以超过 1,请使用 *
而不是 ?
(但我想你必须考虑正确的 "prefix" 组边界).
此外,您的正则表达式中的 [0-9a-f][0-9a-f]{8}
需要 9 个字符,但实际上有 8 个。
3 个连续的 -[0-9a-f]{4}
可以缩进另一个非捕获组 (?:-[0-9a-f]{4}){3}
.
注意:在模式前面加上 (?i)
(不区分大小写的修饰符)可能是个好主意:(?i)^images/(?:(?P<prefix>\w+)/)?(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)