Django URL正则表达式包含正斜杠

时间:2018-04-11 17:12:48

标签: python regex django url django-urls

我在创建允许所有字符(包括正斜杠)的Django URL正则表达式时遇到问题。更具体地说,我遇到的问题是区分URL args中使用的正斜杠和URL中用作分隔符的正斜杠。

示例:

我有一个如下所示的网址: localhost:8000 / jfe / customer / customerNumb / invoice2 / portfolio /

这包含3个URL参数: 的 customerNumb, invoice2, 投资组合。

我的目标是让它变成参数2可以包含特殊字符,包括'/',所以第二个参数可以是“KJ 02/2017”(没有引号)。

例如: localhost:8000 / jfe / customer / customerNumb / KJ 02/2017 / portfolio /

在使用“KJ 02/2017”的示例中,我无法区分“KJ 02/2017”中的'/'和分隔arg2和arg3的'/'。

我的正则表达式:

url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>[^/]+)/$')
url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>[^/]+)/(?P<portfolio>[^/]+)/$')

我也试过

url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>.+)/$')
url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>.+)/(?P<portfolio>[^/]+)/$')

如果我对网址进行编码:

示例: localhost:8000 / jfe / customer / customerNumb / KJ%2002%2F2017 / portfolio / 正则表达式会像这样解析它:

arg1: customerNumb, arg2: KJ%2002%2F2017 / portfolio /

我想要的时候:

arg1: customerNumb arg2: KJ%2002%2F2017 arg3:投资组合

有人可以帮我理解我正在弄乱我的正则表达式吗?或者让我知道它是否可能在网址参数中包含'/'?

谢谢

修改 有人指出我的第二次尝试是有效的,这是真的,但是我想提一下Django似乎在传递它之前对URL进行解码正则表达式。因此,正则表达式将其视为:

localhost:8000 / jfe / customer / customerNumb / KJ 02/2017 / portfolio /

2 个答案:

答案 0 :(得分:0)

这不会做

"/[0-9]+(?:-|.|\/)+[a-zA-Z]+(?:-|.|\/)+[0-9]/"

答案 1 :(得分:0)

我无法弄清楚如何创建一个正则表达式,当它们有一个'/'时会捕获参数。为了解决这个问题,我对参数进行了双重编码,以便在转到URL调度程序时不会完全解码。

感谢您的帮助, -C