Що означає цей регулярний вираз Django? `? P`


74

У мене є такий регулярний вираз (регулярний вираз), urls.pyі я хотів би знати, що це означає. Зокрема, (?P<category_slug>частина регулярного виразу.

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

Відповіді:


54

(?P<name>regex)- Круглі дужки групують регулярні вирази між собою. Вони фіксують текст, відповідний регулярному виразу, всередині них, на який можна вказати назву між різкими дужками. Назва може складатися з літер і цифр.

Скопіюйте вставку з: http://www.regular-expressions.info/refext.html


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'і т.д.).
Як

37
@ThiefMaster: Найкраща друкарська помилка
BoltClock

7
@ThiefMaster +1 для категорії_люда
Джоан-Дієго Родрігес

4
@ThiefMaster Ваш коментар зробив мені день.
Хаям Гондал

-1

Нове у версії 3.6.

(?P<name>...) Подібно до звичайних дужок, але підрядок, що відповідає групі, доступний через символічне ім'я групи. Імена груп повинні бути дійсними ідентифікаторами Python, і кожне ім'я групи має бути визначене лише один раз у регулярному виразі. Символічна група - це також нумерована група, так само, як ніби група не була названа.

скопіюйте пасту з Python3Regex


-1

У збігу шаблонів використовуйте цей шаблон для передачі рядка

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

Це для значення числа

(?P<user_id>[0-9]+)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.