Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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:匹配urlconf中一组关键字正则表达式中的一个或多个_Python_Regex_Django_Grouping_Urlconf - Fatal编程技术网

Python Django:匹配urlconf中一组关键字正则表达式中的一个或多个

Python Django:匹配urlconf中一组关键字正则表达式中的一个或多个,python,regex,django,grouping,urlconf,Python,Regex,Django,Grouping,Urlconf,我有一个Django视图,它接受三个可选的关键字参数。我想处理正则表达式,以便在一行中将可能的URL匹配到此视图。我想很好地构造URL 例如: 我可能的参数是start,它是一个int,serial是一个长度为13的字符串,end是另一个int url可能如下所示: /main/s20130509/e20130510/ABC1234567890 or /main/s20130509/e20130510/ or /main/ABC1234567890 其中e和s前缀组件分别为end和start

我有一个Django视图,它接受三个可选的关键字参数。我想处理正则表达式,以便在一行中将可能的URL匹配到此视图。我想很好地构造URL

例如: 我可能的参数是start,它是一个int,serial是一个长度为13的字符串,end是另一个int

url可能如下所示:

/main/s20130509/e20130510/ABC1234567890
or
/main/s20130509/e20130510/
or 
/main/ABC1234567890
其中e和s前缀组件分别为end和start,ABC1234567890为串行

我想提取这些结束、开始、序列值,并将它们作为值start=s20130509等传递给视图

现在,我通过在单独的行上详尽地列出排列来实现这一点,似乎一定有更好的方法

我试着做一些类似的事情:

url(r'^base_url/(?P<serial>[^/]{13}|(?P<end>e\d{8})|(?P<start>s\d{8})/*$', view_method),
url(r'^base\u url/(?P[^/]{13}}}(?Pe\d{8})|(?Ps\d{8})/*$,视图方法),
基本上,我想做的逻辑对我来说很清楚;我想提取三个匹配中任何一个的所有实例,并将它们作为关键字参数传递,但我找不到资源来找出适合这一点的正则表达式语法

有什么想法吗?我很乐意做任何能让工作优雅完成的事情

谢谢你抽出时间


蒂姆

你想要的是:

url(r'^base_url/(?P<serial>[^/]{13}/$', view_method),
然后,按任意顺序最多允许2个:

((?:s(?P<start>\d{8})/)|(?:e(?P<end>\d{8})/)){0,2}
KWARG看起来是这样的(当对所有三个段进行请求时,从
视图
的子类的
get
方法中引发了一个异常-当忽略时,结束和/或开始是
None
):


这会让人非常困惑。不要在一行中完成。让URL在单独的目标中匹配感觉非常糟糕。即使我在应用程序中强制排序不同的参数,我也会重复6行URL。这组特定的输入是我的一些视图需要接受的,因此我可能有12-18行冗余的映射。我很喜欢它如果有人幽默我并用一个表达式来描述如何做到这一点,那么让我/这篇文章的未来发现者来决定它是否值得这么复杂。找到了一个类似的线索。这两种解决方案都主张对URL进行硬编码,或者沿着“/”进行解析然后让视图处理更复杂的逻辑。我觉得有一个更好的解决方案。:Orokusaki,这正是我想要做的。我会检查一下。我在这里的部分动机是认为这种情况在未来会出现很多,所以我很感谢答案。接受等待处理!接受,谢谢。我特别感谢t他意识到我试图做的事情,并将非捕获组件包含在一个外部组中。我不知道这一点,并且会发现它非常方便。@TimWilder-没问题。我很高兴这就是你所寻找的。
((?:s(?P<start>\d{8})/)|(?:e(?P<end>\d{8})/)){0,2}
url(r'^base_url/((?:s(?P<start>\d{8})/)|(?:e(?P<end>\d{8})/)){0,2}(?P<serial>[^/]{13})/$', view_method),
http://127.0.0.1:8080/base_url/e77777777/s88888888/1234567890123/
http://127.0.0.1:8080/base_url/s88888888/e77777777/1234567890123/
http://127.0.0.1:8080/base_url/s88888888/1234567890123/
http://127.0.0.1:8080/base_url/e77777777/1234567890123/
http://127.0.0.1:8080/base_url/1234567890123/
{'start': u'88888888', 'serial': u'1234567890123', 'end': u'77777777'}