这个Django正则表达式是什么意思?`?P`


74

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

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

Answers:



78

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

未命名的捕获组(仅带有括号)将作为参数传递给您的视图。

?P是命名捕获组,与未命名捕获组相反。

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

(?P<name>...)与正则括号相似,但是通过符号组名可以在正则表达式的其余部分中访问与组匹配的子字符串。组名必须是有效的Python标识符,并且每个组名必须在一个正则表达式中仅定义一次。符号组也是带编号的组,就像未命名该组一样。因此,在下面的示例中,名为id的组也可以称为编号为1的组。


21

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

正则表达式本身会匹配一个字符串,该字符串以category/字母开头,然后是字母数字字符,破折号-和下划线的混合_,后跟一个斜杠。

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

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

21
我不熟悉django,但最可能的行为是该视图函数将收到一个名为category_slut
ThiefMaster

1
@ cfarm54-re模块提供匹配表达式的函数。如果文本与正则表达式匹配,它们将返回Match对象。然后match.group('category_slug')返回组(的内容'foo''foo_bar-baz'等等)。
yak

37
@ ThiefMaster:史上最佳错字
BoltClock

7
@ThiefMaster +1对于category_slut
琼-迭戈·罗德里格斯

4
@ThiefMaster您的意见让我很高兴。
Khayam Gondal

-1

3.6版的新功能。

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

Python3Regex复制粘贴


-1

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

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

此为整数值

(?P<user_id>[0-9]+)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.