regular online example escape python regex regex-group

python - online - Grupo de expresiones regulares llamado "(? P<group_name> regexp)": ¿qué significa "P"?



python regex replace (2)

¡Patrón! 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 usan dichos grupos.

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

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

¿Qué significa "P"? No pude encontrar ninguna pista en la syntax .

Me encantaría obtener ideas sobre cómo ayudar a mis alumnos a recordar esta sintaxis. Saber qué significa "P" (o podría significar) sería útil.


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

Asunto: reclamación (? P ...) extensiones de sintaxis regex

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

Fecha: 10 de diciembre de 1997 3:36:19 p.m.

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

Probablemente estés al tanto de Python. Soy el creador de Python; Planeo lanzar una próxima versión "importante", Python 1.5, para fines de este año. Espero que Python y Perl puedan coexistir en los años venideros; la polinización cruzada puede ser buena para ambos idiomas. (Creo que Larry echó un buen vistazo a Python cuando agregó objetos a Perl 5; O''Reilly publica libros sobre ambos idiomas).

Como sabrá, Python 1.5 agrega un nuevo módulo de expresiones regulares que se acerca más a la sintaxis de Perl. Intentamos estar lo más cerca posible de la sintaxis de Perl dentro de la sintaxis de Python. Sin embargo, la sintaxis de expresiones regulares tiene algunas extensiones específicas de Python, todas las cuales comienzan con (? P. Actualmente hay dos de ellas:

(?P<foo>...) Similar a los paréntesis de agrupación regulares, pero el texto
emparejado por el grupo es accesible después de que se haya realizado la coincidencia, a través del nombre simbólico del grupo "foo".

(?P=foo) Coincide con la misma cadena que coincide con el grupo llamado "foo". Equivalente a / 1, / 2, etc. excepto que el grupo se refiere
a por nombre, no a número.

Espero que esta extensión específica de Python no entre en conflicto con futuras extensiones de Perl a la sintaxis regex de Perl. Si tiene planes de usar (? P, háganoslo saber lo antes posible para que podamos resolver el conflicto. De lo contrario, sería bueno si la sintaxis (? P) pudiera reservarse permanentemente para extensiones de sintaxis 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 perl5-porters externos, por lo que se trata de una actividad con poco ancho de banda. (Lo siento, fue incluso más bajo la semana pasada, estaba en Nueva York en Internet World).

De todos modos, en lo que a mí respecta, seguramente puede tener ''P'' con mi bendición. (Obviamente, Perl no necesita la ''P'' en este punto. :-) [...]

Entonces, no sé por qué la elección original de P fue motivada por - patrón? marcador de posición? pingüinos? - pero puedes entender por qué siempre lo he asociado con Python. Que teniendo en cuenta que (1) no me gustan las expresiones regulares y evitarlas siempre que sea posible, y (2) este hilo sucedió hace quince años, es algo extraño.