【问题标题】:Python: Having trouble understanding regexPython:无法理解正则表达式
【发布时间】:2013-02-01 02:04:17
【问题描述】:

我正在阅读 django 教程,虽然现在几乎所有内容看起来都很清楚,但在匹配 url 时我无法理解正则表达式:

r'^(?P<poll_id>\d+)/$

(?P<poll_id>\d+) 是做什么的?

我知道在从"polls/34/" 中剥离"34/" 之后,正在调用polls.url 并且正在寻找关键字urlpatterns,但是poll_id 如何获得这个值34 ?

我只知道一点正则表达式,所以这就是我可能难以阅读的原因。 另外,这是我用于此问题的参考:Tutorial Part3

【问题讨论】:

    标签: python regex django


    【解决方案1】:

    这是一个将poll_id(一个数字)作为变量的正则表达式。

    对应的视图是:

    def detail(request, poll_id):
        return HttpResponse("You're looking at poll %s." % poll_id)
    

    现在,当您转到 example.com/polls/34/ 时,它知道您正在寻找 poll 号码 34,并将其作为 poll_id 带到视图中。

    所以在你看来,poll_id = 34。这允许您显示或操作此特定民意调查。

    在这种情况下,正则表达式的主要目的是允许您查看大量特定的民意调查,而不必为每个民意创建明确的 url。

    为了澄清,这个正则表达式是说取任何数字\d+,将其保存为poll_id,然后使用poll_id继续查看此视图​​。

    【讨论】:

    • 所以这是编写正则表达式 ?P<variable_name> 的标准方法吗?
    • 虽然?P<variable_name> 是正则表达式的一部分,但它是保存变量的部分。在这种情况下,实际的正则表达式搜索是\d+。所以本质上正则表达式是说取任意数字 - \d+,将其保存为 variable_name,然后将 variable_name 带到这个视图中。
    • 太棒了,得到了我的答案:D
    【解决方案2】:

    为了支持 Dan Hoerst 的回答:是的,django 使用正则表达式来提取视图的 poll_id。下面是:

    import re 
    r = re.compile(r'^poll/(?P<poll_id>\d+)/$')
    r.match('poll/132/').groups() # ('132',)
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2010-10-31
      相关资源
      最近更新 更多