python - 无法匹配 url 正则表达式中电子邮件地址后的尾随斜杠

标签 python regex django

我无法将电子邮件地址与我的网址正则表达式中的尾部斜杠相匹配,并且我不明白为什么。以下是与电子邮件地址匹配的正则表达式不带尾部斜杠:

r'^customer/(?P<customer_email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$)$'

正如预期的那样,这匹配 /customer/someone@example.com,而不是 /customer/someone@example.com/

我本以为附加 /? 会起作用,因为匹配电子邮件地址的域后缀的正则表达式不应该贪婪地匹配斜杠。 (这是许多其他重复的正则表达式尾部斜杠问题的解决方案)。

r'^customer/(?P<customer_email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63}$)/?$'

正如预期的那样,这与 /customer/someone@example.com 匹配,但意外的是它与 /customer/someone@example.com/ 不匹配。 为什么?

settings.py 中的

APPEND_SLASH 未设置。我不想将斜线捕获为 customer_email url 参数的一部分。

最佳答案

$ anchor 意味着字符串的结尾,并且第一次将其放在消耗模式中时,它需要结尾那里有字符串。

因此,您需要删除模式中的第一个 $ 并使用

^customer/(?P<customer_email>[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,63})/?$

请参阅regex demo

关于python - 无法匹配 url 正则表达式中电子邮件地址后的尾随斜杠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41335916/

相关文章:

python - 如何在 Python 中配置日志记录到 syslog?

C++ 正则表达式排除双引号不起作用

python - 如何重新创建 Django 项目的数据库?

python - 覆盖 Django ModelForm 中的保存方法

javascript - 我如何使用此 JavaScript 返回带有特定哈希标签的推文?

database - Django 模型加入一对多关系以在模板中显示

python - Sqlalchemy,python,用数据填充数据库的最简单方法

python - 这个例子如何使用正则表达式?

python - 使用 Python 请求的重定向错误太多

javascript - 给定一个 ID,找到最后一句话并将其替换为跨度包装器