Expresiones regulares Agrupación con paréntesis Python

No olvide importar el modulo re

import re

En un número telefónico digamos que quiere separar el código de área del resto del número. Si añade paréntesis, creará grupos en la expresión regular: (\d\d\d)-(\d\d\d-\d\d\d\d). A continuación, puede utilizar el método de objeto de coincidencia group() para obtener el texto coincidente de un solo grupo.

El primer conjunto de paréntesis en una cadena regex será el grupo 1. El segundo conjunto será el grupo 2. Pasando el número entero 1 o 2 al método group() del objeto match, puede tomar diferentes partes del texto coincidente. Pasando 0 o nada al método group() se obtendrá todo el texto coincidente. Introduzca lo siguiente en el shell interactivo:

>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('My number is 415-555-4242.')
>>> mo.group(1)
'415'
>>> mo.group(2)
'555-4242'
>>> mo.group(0)
'415-555-4242'
>>> mo.group()
'415-555-4242'

Si desea recuperar todos los grupos a la vez, utilice el método groups()nótese la forma plural del nombre.

>>> mo.groups()
('415', '555-4242')
>>> areaCode, mainNumber = mo.groups()
>>> print(areaCode)
415
>>> print(mainNumber)
555-4242

Dado que mo.groups() devuelve una tupla de múltiples valores, puede utilizar el truco de la asignación múltiple para asignar cada valor a una variable separada, como en la línea anterior areaCode, mainNumber = mo.groups().

Los paréntesis tienen un significado especial en las expresiones regulares, pero ¿qué hace si necesita hacer coincidir un paréntesis en su texto? Por ejemplo, puede que los números de teléfono con los que quiere coincidir tengan el código de área entre paréntesis. En este caso, debe escapar los caracteres ( y ) con una barra invertida. Introduzca lo siguiente en el shell interactivo:

>>> phoneNumRegex = re.compile(r'(\(\d\d\d\)) (\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('My phone number is (415) 555-4242.')
>>> mo.group(1)
'(415)'
>>> mo.group(2)
'555-4242'

Los caracteres de escape \( y \ ) en la cadena cruda pasada a re.compile() coincidirán con caracteres de paréntesis reales. En las expresiones regulares, los siguientes caracteres tienen un significado especial:

.  ^  $  *  +  ?  {  }  [  ]  \  |  (  )

Si desea detectar estos caracteres como parte de su patrón de texto, debe escaparlos con una barra invertida:

\.  \^  \$  \*  \+  \?  \{  \}  \[  \]  \\  \|  \(  \)

Asegúrese de comprobar que no ha confundido los paréntesis escapados \( y \) con los paréntesis ( y ) en una expresión regular. Si recibe un mensaje de error sobre “missing )” o “unbalanced parenthesis,”, es posible que haya olvidado incluir el paréntesis de cierre sin escapar para un grupo, como en este ejemplo:

>>> re.compile(r'(\(Parentheses\)')
Traceback (most recent call last):
    --snip--
re.error: missing ), unterminated subpattern at position 0

El mensaje de error le indica que hay un paréntesis de apertura en el índice 0 de la cadena r'(\(Parentheses\)' al que le falta su correspondiente paréntesis de cierre.

Deja una respuesta