无法匹配url regex中的电子邮件地址后的尾部斜杠

时间:2016-12-26 20:18:46

标签: 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/不匹配。的 为什么?

APPEND_SLASH中的

settings.py未设置。我不想将斜杠捕获为customer_email url参数的一部分。

1 个答案:

答案 0 :(得分:2)

$锚意味着字符串的结尾,并且第一次将其置于消费模式中时,它需要字符串的结尾。

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

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

请参阅regex demo