python - 为什么 Django 找不到这些 url,尽管正则表达式匹配?

标签 python regex django

在 regex 的 python 文档中有关于“.”的描述。做:

(Dot.) In the default mode, this matches any character except a newline. If the DOTALL flag has been specified, this matches any character including a newline.

对于我在 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 没有返回正确的 View ,而是返回 404。在将 url 传递给该正则表达式之前,它是否对 url 做了一些事情?

最佳答案

快速测试确认这应该有效:

>>>import re
>>>test = ["accounts/confirm/fb75c6529af9246e4e048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e-048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e=048d8a4298882909dc03ee0/", "accounts/confirm/fb75c6529af9246e4e%20048d8a4298882909dc03ee0/"]
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
True

这将在任何不匹配的情况下返回 false:

>>>test.append("something else")
>>>all([re.match(r'^accounts/confirm/(.+)$', item) for item in test])
False

问题一定出在别处。

关于python - 为什么 Django 找不到这些 url,尽管正则表达式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066891/

相关文章:

python - 期望使用 BeautifulSoup 从 HTML 页面中提取字符串,但得到 "None"

python - 如何加速python网络?

c - 词法分析器正确输出但指针 "filename"包含错误名称

python - Django错误: create_user() takes at least 2 arguments (3 given)

Django TextChoices 行为

python - Django - 获取出价最高的用户

Python - GroupBy 对象的滚动函数

python - Django,织物 : What is the best way to manage secret keys to deploy Django projects?

java - 不明白正则表达式的结果

php - 在第 n 个数字之后放置一些内容,而不是第 n 个字符?