1

嗨,我一直对 Regex 感到困惑,我不明白对其他帮助线程的响应。

基本上我的问题是,我可以结合

r'^input/?$'

r'^input/index.html?$'

进入这个?

r'^input(/(index.html?)?)?$'

在 Django 中,我收到此错误:

input() takes exactly 1 argument (3 given)

它只在正确匹配时给出错误,所以也许这不是正则表达式问题?

4

2 回答 2

1

就个人而言,我不希望将这两个正则表达式结合起来。我认为有两个网址模式,

url(r'^input/?$', input, name="input"),
url(r'^input/index.html?$', input),

比一个更具可读性。

但是,如果您确实想将两者结合起来,则可以使用非捕获括号:

r'^input(?:/(?:index.html?)?)?$'

一个简单的例子可能有助于解释:

>>> import re
>>> # first try the regex with capturing parentheses
>>> capturing=r'^input(/(index.html?)?)?$'
>>> # Django passes the two matching strings to the input view, causing the type error
>>> print re.match(capturing, "input/index.html").groups()
('/index.html', 'index.html')
>>> # repeat with non capturing parentheses
>>> non_capturing=r'^input(?:/(?:index.html?)?)?$'
>>> print re.match(non_capturing, "input/index.html").groups()
()

有关详细信息,请参阅正则表达式高级语法参考页面。

于 2012-05-31T01:55:53.870 回答
0

如果您在您的中使用它,urlpatterns则不需要编写?符号,因为之后的所有内容都可以在您的视图函数中解析。并且请求/input/index.html?param=2将使用正则表达式正确处理r'^input/index.html$'。然后在视图函数中,您可以获得如下参数:

def my_view(request):
    param = request.GET.get('param', 'default_value')

在此处查找更多信息:https ://docs.djangoproject.com/en/1.9/topics/http/urls/

于 2016-08-10T12:50:11.803 回答