在 regex 的 python 文档中,有对“。”的描述。做:
(点。)在默认模式下,这匹配除换行符以外的任何字符。如果指定了 DOTALL 标志,则它匹配任何字符,包括换行符。
对于我在 Django 中做的一个项目,我设置了这个正则表达式:
url(r'^accounts/confirm/(.+)$', confirm,name='confirmation_view')
据我所知,这应该匹配任何以'accounts/confirm/'开头的url,然后是任意数量的任意字符。然后将这些任意字符作为参数传递给函数“confirm”。到目前为止,一切都很好。
所以这个正则表达式应该匹配
accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/
一样好
accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/
和
accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/
和
accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/
至少,这是我认为它会做的。但它没有,它只匹配第一个。Django 一直在给我一个 404 其他的。我不明白,因为表达式的 (.+) 部分应该表示“匹配一个或多个除换行符以外的任何字符”。
编辑: 正如评论和答案所证明的那样,我得到了正确的正则表达式。所以现在这是一个问题:为什么 Django 没有返回正确的视图,而是 404。在将 url 传递给该正则表达式之前,它是否对 url 做了一些事情?