Django URL正则表达式:使URL容忍int或float值

时间:2012-03-20 22:27:26

标签: python regex django url numbers

网址格式为: 的域/在startValue / endValue值/内容

这里,startValue和endValue采用int或float数字..

我尝试过: /(\d+)/(\d+)采用int值

/(\d+\.\d+)/(\d+\.\d+)采用浮动值

但不知道如何将它们组合在一起,它采用两种格式的数字

尝试:

 /(\d+)|(\d+\.\d+)/(\d+)|(\d+\.\d+)
浏览器告诉

url与视图函数参数不匹配

感谢任何建议!

4 个答案:

答案 0 :(得分:6)

由于您始终以整数开头,因此只需使用?正则表达式运算符使浮点部分可选,并使用非捕获组:

intorfloat_re = "(\d+(?:\.\d+)?)"

..并在网址定义中使用该字符串。

答案 1 :(得分:4)

我知道这已经得到了回答和接受,但是正在寻找正确的正则表达式,这个正在通过我的道路。 因此对给定和接受的答案进行一点调整:

使用

intorfloat_positiveornegative_re = "(-?\d+(?:\.\d+)?)"

如果您希望它接受负整数或正整数或浮点数

顺便说一句,我将这个答案与这个问题的答案结合起来:Regex to match a negative number in Django URL dispatcher?

答案 2 :(得分:2)

你试图从正则表达式匹配中返回太多组。试试这个:

(\d?\.\d+|\d+)

这将匹配0-1位,然后是。,然后是一个或多个数字。它也首先获得浮点数,因此你不会得到第一个数字而不是浮点数。

答案 3 :(得分:1)

这可能很旧,但仅仅是出于同谋,这样的东西可能会更有用和更安全

"-?\d{1,3}(\.\d{1,5})?"

,您可以指定所需范围