Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django URL正则表达式包含正向斜杠_Python_Regex_Django_Url_Django Urls - Fatal编程技术网

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

Python Django URL正则表达式包含正向斜杠,python,regex,django,url,django-urls,Python,Regex,Django,Url,Django Urls,我在创建Django URL正则表达式时遇到问题,该正则表达式允许所有字符(包括正斜杠)。更具体地说,我遇到的问题是区分URL参数中使用的正斜杠和URL中用作分隔符的正斜杠 例如: 我有一个如下所示的URL: localhost:8000/jfe/customer/customerNumb/invoice2/portfolio/ 这包括3个URL参数: 客户umb, 发票2, 投资组合。 我的目标是使参数2可以包含特殊字符,包括“/”,因此第二个参数可以类似于“KJ 02/2017”(不带引号)

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

例如:

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

这包括3个URL参数: 客户umb, 发票2, 投资组合。

我的目标是使参数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[0-9]+)/(?P[^/]+)/$)
url(r'^customer/(?P[0-9]+)/(?P[^/]+)/(?P[^/]+)/$)
我也试过了

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[0-9]+)/(?P.+)/$)
url(r'^customer/(?P[0-9]+)/(?P.+)/(?P[^/]+)/$)
如果我对URL进行编码:

示例:localhost:8000/jfe/customer/customerNumb/KJ%2002%2F2017/portfolio/ 正则表达式将对其进行如下解析:

arg1:customerNumb, arg2:KJ%2002%2F2017/组合/

当我想要的时候:

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

有人能帮我理解我在正则表达式中的错误吗?或者让我知道是否有可能在url参数中包含“/”

多谢各位

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

localhost:8000/jfe/customer/customerNumb/KJ 02/2017/portfolio/这样不行吗

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

我不知道如何创建一个正则表达式,当参数有一个“/”时,它将捕获这些参数。为了解决这个问题,我对参数进行了双重编码,这样在转到URL调度程序时它就不会被完全解码

谢谢你的帮助,
-C

如果你的意思是我的论点中不应该有“/”的话,你不应该这样做,我同意,但这是一项业务要求,我做不了多少。你的第二次尝试。我还尝试了未编码的字符串,得到了相同的结果。我认为问题在于Django在将URL传递给正则表达式之前对其进行解码。是否有帮助?谢谢Paddy的回复。我尝试了一下,但无法识别URL模式。这就是它的样子:url(r'^customer/(?P[0-9]+)/(?P[0-9]+(?:-|.| \/)+[a-zA-Z]+(?:-|.| \/)+[0-9])/(?P[^/]+)/$)