3

使用 Django 1.5.1 我正在尝试匹配:

/uploads/view/FILE_NAME.ext  eg: /uploads/view/testfile.png

目前:

uploads_url_patterns = patterns('',
    url(r'^uploads/view/(?P<file_name>\w{0,256})/$', ShowImageView.as_view(), name='show'),
)

然而它不匹配/uploads/view/testfile.png

由于我仍在努力理解 python 正则表达式我如何匹配所以我最终得到一个包含文件名及其扩展名的字符串,或者更好的是,它的文件名和扩展名分别是?

4

1 回答 1

12

\w不匹配.,因此.png扩展名不匹配。将.点添加到您的角色类。您还想删除尾部斜杠:

uploads_url_patterns = patterns('',
    url(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', ShowImageView.as_view(), name='show'),
)

这现在将匹配文字文本uploads/view/,后跟 0 到 256 个字母、数字、下划线和点。

快速演示:

>>> import re
>>> re.search(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', 'uploads/view/test_filename.png')
<_sre.SRE_Match object at 0x103aa5828>
>>> re.search(r'^uploads/view/(?P<file_name>[\w.]{0,256})$', 'uploads/view/test_filename.png').groupdict()
{'file_name': 'test_filename.png'}
于 2013-07-02T07:37:04.953 回答