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