这个django正则表达式意味着什么? `?P`

时间:2011-11-03 00:20:21

标签: python regex django capturing-group

我在urls.py中有以下正则表达式,我想知道这意味着什么。特别是正则表达式的(?P<category_slug>部分。

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

5 个答案:

答案 0 :(得分:65)

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

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

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

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

  

(?P<name>...)与常规括号类似,但是子串   在该组的其余部分可以访问该组   表达式通过符号组名称名称。组名必须有效   Python标识符和每个组名必须只定义一次   在正则表达式中。符号组也是编号的   组,就像组没有命名一样。所以该组名为id in   以下示例也可以作为编号组1引用。

答案 1 :(得分:48)

(?P<name>regex) - 圆括号将它们之间的正则表达式组合在一起。它们捕获与其中正则表达式匹配的文本,可以通过尖括号之间的名称引用。名称可能由字母和数字组成。

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

答案 2 :(得分:20)

(?P<category_slug>)创建一个名为category_slug的匹配组。

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

正则表达式接受的示例网址:

  • 类别/富/
  • 类别/ foo_bar这样的名称巴兹/
  • 类别/ 12345 /
  • 类别/ q1e2_asdf /

答案 3 :(得分:-1)

版本3.6中的新功能。

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

Python3Regex

复制粘贴

答案 4 :(得分:-1)

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

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

此为整数值

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