python – Named regular expression group (?Pregexp): what does P stand for?

python – Named regular expression group (?Pregexp): what does P stand for?

Since were all guessing, I might as well give mine: Ive always thought it stood for Python. That may sound pretty stupid — what, P for Python?! — but in my defense, I vaguely remembered this thread [emphasis mine]:

Subject: Claiming (?P…) regex syntax extensions

From: Guido van Rossum (gui…@CNRI.Reston.Va.US)

Date: Dec 10, 1997 3:36:19 pm

I have an unusual request for the Perl developers (those that develop
the Perl language). I hope this (perl5-porters) is the right list. I
am ccing the Python string-sig because it is the origin of most of
the work Im discussing here.

You are probably aware of Python. I am Pythons creator; I am
planning to release a next major version, Python 1.5, by the end of
this year. I hope that Python and Perl can co-exist in years to come;
cross-pollination can be good for both languages. (I believe Larry
had a good look at Python when he added objects to Perl 5; OReilly
publishes books about both languages.)

As you may know, Python 1.5 adds a new regular expression module that
more closely matches Perls syntax. Weve tried to be as close to the
Perl syntax as possible within Pythons syntax. However, the regex
syntax has some Python-specific extensions, which all begin with (?P .
Currently there are two of them:

(?P<foo>...) Similar to regular grouping parentheses, but the text
matched by the group is accessible after the match has been performed,
via the symbolic group name foo.

(?P=foo) Matches the same string as that matched by the group named
foo. Equivalent to 1, 2, etc. except that the group is referred
to by name, not number.

I hope that this Python-specific extension wont conflict with any
future Perl extensions to the Perl regex syntax. If you have plans to
use (?P, please let us know as soon as possible so we can resolve the
conflict. Otherwise, it would be nice if the (?P syntax could be
permanently reserved for Python-specific syntax extensions.
there some kind of registry of extensions?)

to which Larry Wall replied:

[…] Theres no registry as of now–yours is the first request from
outside perl5-porters, so its a pretty low-bandwidth activity.
(Sorry it was even lower last week–I was off in New York at Internet

Anyway, as far as Im concerned, you may certainly have P with my
blessing. (Obviously Perl doesnt need the P at this point. 🙂 […]

So I dont know what the original choice of P was motivated by — pattern? placeholder? penguins? — but you can understand why Ive always associated it with Python. Which considering that (1) I dont like regular expressions and avoid them wherever possible, and (2) this thread happened fifteen years ago, is kind of odd.

Pattern! The group names a (sub)pattern for later use in the regex. See the documentation here for details about how such groups are used.

python – Named regular expression group (?Pregexp): what does P stand for?

Python Extension. From the Python Docs:

The solution chosen by the Perl developers was to use (?…) as the
extension syntax. ? immediately after a parenthesis was a syntax error
because the ? would have nothing to repeat, so this didn’t introduce
any compatibility problems. The characters immediately after the ?
indicate what extension is being used, so (?=foo) is one thing (a
positive lookahead assertion) and (?:foo) is something else (a
non-capturing group containing the subexpression foo).

Python supports several of Perl’s extensions and adds an extension
syntax to Perl’s extension syntax.If the first character after the
question mark is a P, you know that it’s an extension that’s specific
to Python

Leave a Reply

Your email address will not be published.