【问题标题】:What does this Django regular expression mean? `?P`这个 Django 正则表达式是什么意思? `?P`
【发布时间】:2011-12-20 19:06:52
【问题描述】:

我的urls.py 中有以下正则表达式 (regex),我想知道它的含义。特别是正则表达式的(?P<category_slug> 部分。

r'^category/(?P<category_slug>[-\w]+)/$

【问题讨论】:

    标签: python regex django capturing-group


    【解决方案1】:

    (?P&lt;category_slug&gt;) 创建一个名为 category_slug 的匹配组。

    正则表达式本身匹配以category/ 开头的字符串,然后是字母数字字符的组合,短划线- 和下划线_,后跟斜杠。

    正则表达式接受的示例 URL:

    • 类别/foo/
    • 类别/foo_bar-baz/
    • 类别/12345/
    • 类别/q1e2_asdf/

    【讨论】:

    • 我不熟悉 django,但最有可能的行为是视图函数会收到一个名为 category_slut 的关键字参数
    • @cfarm54 -- re 模块提供了匹配表达式的函数。如果文本与正则表达式匹配,它们会返回一个 Match 对象。然后match.group('category_slug')返回组的内容('foo''foo_bar-baz'等)。
    • @ThiefMaster:有史以来最好的错字
    • @ThiefMaster +1 for the category_slut
    • @ThiefMaster 你的评论让我很开心。
    【解决方案2】:

    (?P&lt;name&gt;regex) - 圆括号将它们之间的正则表达式分组。它们捕获与它们内部的正则表达式匹配的文本,这些文本可以由尖括号之间的名称引用。名称可以由字母和数字组成。

    http://www.regular-expressions.info/refext.html复制粘贴

    【讨论】:

      【解决方案3】:

      在 django 中,命名的捕获组作为关键字参数传递给您的视图。

      未命名的捕获组(只是一个括号)作为参数传递给您的视图。

      ?P 是一个命名的捕获组,而不是一个未命名的捕获组。

      http://docs.python.org/library/re.html

      (?P&lt;name&gt;...) 类似于正则括号,但子字符串 组匹配的可以在常规的其余部分中访问 通过符号组名 name 表达。组名必须有效 Python 标识符,每个组名只能定义一次 在正则表达式中。符号组也是编号的 组,就好像该组没有命名一样。所以名为 id 的组在 下面的例子也可以引用为编号组 1。

      【讨论】:

        【解决方案4】:

        3.6 版中的新功能。

        (?P&lt;name&gt;...) 类似于常规括号,但组匹配的子字符串可通过符号组名称访问。组名必须是有效的 Python 标识符,并且每个组名只能在正则表达式中定义一次。符号组也是一个编号组,就好像该组没有命名一样。

        Python3Regex复制粘贴

        【讨论】:

          【解决方案5】:

          在模式匹配中, 使用此模式传递字符串

          (?P<username2>[-\w]+)
          

          这是整数值

          (?P<user_id>[0-9]+)
          

          【讨论】:

            猜你喜欢
            • 2014-11-16
            • 2015-07-23
            • 2017-05-23
            • 2012-05-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-20
            相关资源
            最近更新 更多