我在url.py中多次使用了一个特定的正则表达式。
有没有办法定义全局参数并使用它而不是重写相同的正则表达式?
例如,而不是:
url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>(option1|option2|option3|option4).*)/$', 'views.page'),
url(r'^blog/comment(?P<num>(option1|option2|option3|option4).*)/$', 'views.comment'),
url(r'^blog/user(?P<num>(option1|option2|option3|option4).*)/$', 'views.user'),
这样:
myregex = "(option1|option2|option3|option4)"
url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>myregex.*)/$', 'views.page'),
url(r'^blog/comment(?P<num>myregex.*)/$', 'views.comment'),
url(r'^blog/user(?P<num>myregex.*)/$', 'views.user'),
答案 0 :(得分:2)
正则表达式只是字符串。 r'...'
语法指示原始字符串(即它仅表示在字符串中不会识别转义和引用构造),它不是特定于正则表达式。您可以通过多种方式撰写字符串:
myregex = r'(option1|option2|option3|option4)'
url(r'^blog/$', 'blog.views.page'),
url(r'^blog/page(?P<num>' + myregex + r'.*)/$', 'views.page'),
url(r'^blog/comment(?P<num>%s.*)/$' % myregex, 'views.comment'),
url(r'^blog/user(?P<num>{options}.*)/$'.format(options=myregex), 'views.user'),