Именованная группа регулярных выражений" (?P regexp)": что означает "P"?



в Python (?P<group_name>…)синтаксис позволяет ссылаться на соответствующую строку через ее имя:



>>> import re
>>> match = re.search('(?P<name>.*) (?P<phone>.*)', 'John 123456')
>>> match.group('name')
'John'


что означает "P"? Я не мог найти никакого намека в официальная документация.



Я хотел бы получить идеи о том, как помочь моим ученикам запомнить этот синтаксис. Знание того, что "P" означает (или может означать), было бы полезно.

661   2  

2 ответов:

поскольку мы все гадаем, я мог бы также дать свой: я всегда думал, что это означает Python. Это может показаться довольно глупым -- что, P для Python?! -- но в свое оправдание я смутно вспомнил этой теме [выделено мной]:

Тема: Утверждая (?П...) расширения синтаксиса регулярных выражений

от: Guido van Rossum ([email protected])

дата: 10 декабря 1997 3: 36: 19 pm

у меня есть необычная просьба разработчики Perl (те, которые разрабатывают язык Perl.) Я надеюсь, что это (perl5-porters) правильный список. Я am cc'ING строка Python-sig, потому что она является источником большинства работа, которую я здесь обсуждаю.

вы, вероятно, знаете о Python. Я создатель Python; я планируем выпустить следующую "основную" версию, Python 1.5, к концу года этот год. Я надеюсь, что Python и Perl могут сосуществовать в будущем; перекрестное опыление может быть полезно для обоих языков. (Я верю Ларри хорошо посмотрел на Python, когда он добавил объекты в Perl 5; O'Reilly издает книги на обоих языках.)

Как вы знаете, Python 1.5 добавляет новый модуль регулярных выражений, который более точно соответствует синтаксису Perl. Мы старались быть как можно ближе к Синтаксис Perl, насколько это возможно в синтаксисе Python. Однако, регулярное выражение синтаксис имеет некоторые Python-специфические расширения, которые все начинаются с (?П. В настоящее время их два:

(?P<foo>...) похоже на обычную группировку скобок, но текст
сопоставление по группе доступно после выполнения матча, через символическое название группы "foo".

(?P=foo) соответствует той же строке, что и группа с именем "foo." Эквивалентно \1, \2 и т. д. за исключением того, что группа называется
чтобы по имени, а не количество.

Я надеюсь, что это Python-расширения не будет конфликтовать с любым будущих расширений языка Perl к синтаксису регулярных выражений Perl. Если у вас есть планы использовать (?П, пожалуйста, дайте нам знать как можно скорее, чтобы мы могли решить конфликт. в противном случае, было бы неплохо, если бы (?Синтаксис может быть постоянно зарезервировано для расширений синтаксиса, специфичных для Python. (Is есть какой-то реестр расширений?)

на что Ларри Уолл ответил:

[...] На данный момент нет реестра-ваш первый запрос от внешний perl5-портеры, так что это довольно низкая пропускная способность. (Извините, что это было еще ниже на прошлой неделе-я был в Нью-Йорке в Интернете Мир.)

в любом случае, насколько мне известно, у вас, безусловно, может быть " P " с моим благословение. (Очевидно, Perl не нуждается в " P " в этот момент. : -) [...]

поэтому я не знаю, что первоначальный выбор P был мотивирован -- pattern? заполнитель? пингвины? -- но вы можете понять, почему я всегда ассоциировал его с Python. Что, учитывая, что (1) я не люблю регулярные выражения и избегаю их везде, где это возможно, и (2) этот поток произошел пятнадцать лет назад, немного странно.

шаблон! Группа называет шаблон (sub) для последующего использования в регулярном выражении. Смотрите документация здесь подробнее о том, как используются такие группы.

Comments

    Ничего не найдено.