Python Django URL正则表达式包含正向斜杠
我在创建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的“/” 我的正则表达式: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”(不带引号)
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[^/]+)/$)