Grupo de expresión regular con nombre “(? P regexp)”: ¿qué significa “P”?

En Python, la syntax (?P…) permite referirse a la cadena coincidente a través de su nombre:

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

¿Qué significa “P”? No pude encontrar ninguna pista en la documentación oficial .

Me encantaría obtener ideas sobre cómo ayudar a mis alumnos a recordar esta syntax. Sería útil saber qué significa “P” (o podría significar).

Ya que todos estamos adivinando, también podría dar el mío: siempre he pensado que significaba Python. Eso puede sonar bastante estúpido, ¿qué, P para Python? – pero en mi defensa, recordé vagamente este hilo [énfasis mío]:

Asunto: Reclamar (? P …) extensiones de syntax de expresiones regulares

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

Fecha: 10 de diciembre de 1997 3:36:19 pm

Tengo una solicitud inusual para los desarrolladores de Perl (aquellos que desarrollan el lenguaje Perl). Espero que esta (perl5-porters) sea la lista correcta. Estoy escribiendo la cadena de Python porque es el origen de la mayoría del trabajo que estoy discutiendo aquí.

Probablemente estés al tanto de Python. Soy el creador de Python; Estoy planeando lanzar una próxima versión “importante”, Python 1.5, para finales de este año. Espero que Python y Perl puedan coexistir en los próximos años; La polinización cruzada puede ser buena para ambos idiomas. (Creo que Larry miró bien a Python cuando agregó objetos a Perl 5; O’Reilly publica libros sobre ambos idiomas).

Como ya sabrá, Python 1.5 agrega un nuevo módulo de expresión regular que se ajusta más a la syntax de Perl. Hemos tratado de estar lo más cerca posible de la syntax de Perl dentro de la syntax de Python. Sin embargo, la syntax de expresiones regulares tiene algunas extensiones específicas de Python, que comienzan con (? P. Actualmente hay dos de ellas:

(?P...) Similar a los paréntesis de agrupación regulares, pero el texto
se puede acceder al grupo que coincide con el grupo después de que se haya realizado la coincidencia, a través del nombre del grupo simbólico “foo”.

(?P=foo) Coincide con la misma cadena que coincidió con el grupo llamado “foo”. Equivalente a \ 1, \ 2, etc., excepto que el grupo es referido
Por nombre, no por número.

Espero que esta extensión específica de Python no entre en conflicto con ninguna futura extensión de Perl a la syntax de expresión regular de Perl. Si tiene planes de usar (? P, avísenos lo antes posible para que podamos resolver el conflicto. De lo contrario, sería bueno si la syntax de? P pudiera reservarse permanentemente para las extensiones de syntax específicas de Python. ¿Hay algún tipo de registro de extensiones?)

A lo que Larry Wall respondió:

[…] No hay registro a partir de ahora; la suya es la primera solicitud de los portadores perl5 externos, por lo que es una actividad de ancho de banda bastante bajo. (Lo siento, fue incluso menor la semana pasada, estaba en Nueva York en Internet World).

De todos modos, en lo que a mí respecta, ciertamente puedes tener ‘P’ con mi bendición. (Obviamente, Perl no necesita la ‘P’ en este punto. 🙂 […]

Entonces, ¿no sé cuál fue la motivación original de P? marcador de posición? los pingüinos? – pero puedes entender por qué siempre lo he asociado con Python. Lo cual, considerando que (1) no me gustan las expresiones regulares y las evito siempre que sea posible, y (2) este hilo ocurrió hace quince años, es algo extraño.

¡Modelo! El grupo nombra un (sub) patrón para su uso posterior en la expresión regular. Consulte la documentación aquí para obtener detalles sobre cómo se utilizan dichos grupos.