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]+)/$

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


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.


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 /

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


-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]+)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.