在url regex中匹配文件路径

时间:2016-08-05 10:28:03

标签: regex django django-urls

我需要匹配我的图像的路径:
images/05a813eb-df00-4ed6-b8a5-2930f03fbf5d.jpg
我把它拆分为dir,name和ext

def url(self, name):
    prefix, _ = name.split('/')
    file_name, ext = _.split('.')
    return reverse('image_storage',
                   args=[prefix, file_name, ext])

所以我有images05a813eb-df00-4ed6-b8a5-2930f03fbf5djpg 我的网址格式:

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+)  

但它不匹配,请帮我找到解决方案。

1 个答案:

答案 0 :(得分:1)

您可以使用

^images/(?:(?P<prefix>\w+)/)?(?P<uuid4>[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12})\.(?P<ext>\w+)

请参阅regex demo

images/后的可选目录与可选组(?:(?P<prefix>\w+)/)?匹配。 ?量词匹配1或0次出现。 如果可以有多于1个,请使用*代替?(但我想你必须考虑正确的&#34;前缀&#34;小组边界)。

此外,正则表达式中的[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+)