2

我正在为我的应用程序使用龙卷风网络服务器。

以下是映射到处理程序的 url 之一。

from publish.handler import PublishHandler, PublishedHandler

URLS = [(r'/public/project/(?P<project>.*?)/?$', PublishHandler),
        (r'/stitchemapp-public/project/(?P<project>.*?)/version/(?P<version>v\d{1,}.*)/image/(?P<image>.*?)/$',
                                                    PublishedHandler),
    ]

所有导入和调用处理程序都很好。

但是从 URLS 列表中的第二个 url 映射元组生成的 kwargs 存在一些问题。当我做

print kwargs

它打印:

{'project': u'clearsoup', 'version': u'v2/image/project_home_page_v1.jpg'}

但我期待:

{'project': u'clearsoup', 'version': u'v2', 'image': 'project_home_page_v1.jpg'}

我在哪里做错了。我总是可以编写 hack 从处理程序获取的 kwargs 中获取确切信息,但这不是正确的方法。

请建议我在哪里做错了。

在此先感谢您的帮助。

4

1 回答 1

0

我知道这已经很老了,但它就像版本正则表达式使用贪婪量词一样简单。根据Python 的重新文档

“' '、'+' 和 '?' 限定符都是贪婪的;它们匹配尽可能多的文本。有时这种行为是不希望的;如果 RE <. > 与 b 匹配,它将匹配整个字符串,而不仅仅是 . 在限定符之后添加 ?以非贪婪或最小方式执行匹配;将匹配尽可能少的字符。使用 RE <.*?> 将仅匹配 ."

因此,要修复,请将 .* 替换为 .*?。

您在其他 2 个正则表达式中使用了非贪婪量词,所以我想这是一个错误。

于 2018-07-09T01:33:43.507 回答