Django教程中的正则表达式解释

2021-11-29 22:07:33 发布

您现在位置:Python中文网/ 问答频道 /正文

尽管熟悉regex的基本知识,Django 1.10的教程并没有详细介绍一些regex如何生成动态链接。 我在民意测验下面看这个特定的片段/网址.py地址:

url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),

有人能详细解释一下正则表达式是如何解释的吗?捕获组开始处的量词(?P<question_id>对我来说没有意义。具体来说,Django如何知道<question_id>是外键?你知道吗

3条回答
网友
1楼 ·

(?P<question_id>.*)表示regex在括号内捕获的所有内容都将位于一个名为question\u id的命名组中,可以直接寻址。所以regex不知道它是外键或任何类似的东西,只知道有一个名为question_id的组。括号在传入字符串中不匹配。你知道吗

[0-9]+匹配一个或多个数字长的数字字符串。你知道吗

^是字符串的开头。$是字符串的结尾。^, $, (?P<question_id>, and )是元的,不受字符串的影响,只受字符串的位置和引用regex提取的组的方式的影响。你知道吗

捕获的组作为关键字参数传递给视图(本例中为detail),由视图以有意义的方式使用它。你知道吗

网友
2楼 ·

^(?P<question_id>[0-9]+)/$

^ assert position at start of the string
(?P<question_id>[0-9]+) Named capturing group "question_id"
    [0-9]+ match a single character present in the list below:

        Quantifier: + Between one and unlimited times, as many times as possible, 
        giving back as needed [greedy]
        0-9 a single character in the range between 0 and 9

$ assert position at end of the string

演示和完整解释:https://regex101.com/r/zV3rZ1/1

网友
3楼 ·

(?P<name>...)意味着这个正则表达式有一个名为捕获组,不像(...)语法,它是一个编号的捕获组。Django获取命名参数并将其传递给视图。你知道吗

相关问题