Was bedeutet dieser Django Regex? `? P`

74

Ich habe den folgenden regulären Ausdruck in meiner urls.py und möchte wissen, was das bedeutet. Speziell der (?P<category_slug>Teil der Regex.

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

locoboy
quelle

Antworten:

54

(?P<name>regex)- Runde Klammern gruppieren den regulären Ausdruck zwischen ihnen. Sie erfassen den Text, der mit dem in ihnen enthaltenen regulären Ausdruck übereinstimmt, auf den der Name zwischen den scharfen Klammern verweist. Der Name kann aus Buchstaben und Ziffern bestehen.

Kopieren und einfügen von: http://www.regular-expressions.info/refext.html

Marcus
quelle
76

In Django werden benannte Erfassungsgruppen als Schlüsselwortargumente an Ihre Ansicht übergeben.

Unbenannte Erfassungsgruppen (nur eine Klammer) werden als Argumente an Ihre Ansicht übergeben.

Das? P ist eine benannte Erfassungsgruppe im Gegensatz zu einer unbenannten Erfassungsgruppe.

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

(?P<name>...)Ähnlich wie bei regulären Klammern, aber der Teilstring, mit dem die Gruppe übereinstimmt, ist im Rest des regulären Ausdrucks über den symbolischen Gruppennamen zugänglich. Gruppennamen müssen gültige Python-Bezeichner sein, und jeder Gruppenname darf innerhalb eines regulären Ausdrucks nur einmal definiert werden. Eine symbolische Gruppe ist auch eine nummerierte Gruppe, als ob die Gruppe nicht benannt wäre. Daher kann die Gruppe mit dem Namen id im folgenden Beispiel auch als nummerierte Gruppe 1 bezeichnet werden.

Yuji 'Tomita' Tomita
quelle
21

(?P<category_slug>)Erstellt eine Übereinstimmungsgruppe mit dem Namen category_slug.

Der reguläre Ausdruck selbst entspricht einer Zeichenfolge, die mit category/einer Mischung aus alphanumerischen Zeichen, dem Bindestrich -und dem Unterstrich beginnt _, gefolgt von einem abschließenden Schrägstrich.

Beispiel-URLs, die vom regulären Ausdruck akzeptiert werden:

  • Kategorie / foo /
  • Kategorie / foo_bar-baz /
  • Kategorie / 12345 /
  • Kategorie / q1e2_asdf /
DiebMaster
quelle
21
Ich bin nicht mit Django vertraut, aber das wahrscheinlichste Verhalten ist, dass die Ansichtsfunktion ein Schlüsselwortargument mit dem Namencategory_slut
ThiefMaster
1
@ cfarm54 - Das reModul bietet Funktionen, die dem Ausdruck entsprechen. Sie geben ein Match-Objekt zurück, wenn der Text mit dem regulären Ausdruck übereinstimmt. Dann match.group('category_slug')gibt den Inhalt der Gruppe ( 'foo', 'foo_bar-baz'usw.).
Yak
37
@ThiefMaster: Bester Tippfehler aller Zeiten
BoltClock
7
@ThiefMaster +1 für die category_slut
Joan-Diego Rodriguez
4
@ThiefMaster Ihr Kommentar machte meinen Tag.
Khayam Gondal
-1

Neu in Version 3.6.

(?P<name>...) Ähnlich wie bei normalen Klammern, jedoch ist der von der Gruppe übereinstimmende Teilstring über den symbolischen Gruppennamen zugänglich. Gruppennamen müssen gültige Python-Bezeichner sein, und jeder Gruppenname darf innerhalb eines regulären Ausdrucks nur einmal definiert werden. Eine symbolische Gruppe ist auch eine nummerierte Gruppe, als ob die Gruppe nicht benannt wäre.

Kopieren Einfügen aus Python3Regex

BreakBadSP
quelle
-1

Verwenden Sie beim Mustervergleich dieses Muster zum Übergeben von Zeichenfolgen

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

Dies für den Interger-Wert

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