Uso del signo de interrogación ? en expresiones regulares

A veces hay un patrón con el que se quiere coincidir sólo opcionalmente. Es decir, el regex debe encontrar una coincidencia independientemente de que ese trozo de texto esté ahí o no. El carácter ? marca el grupo que le precede como parte opcional del patrón. Por ejemplo, introduzca lo siguiente en el shell interactivo:

No olvidar importar el modulo re:

import re
>>> batRegex = re.compile(r'Bat(wo)?man')
>>> mo1 = batRegex.search('The Adventures of Batman')
>>> mo1.group()
'Batman'

>>> mo2 = batRegex.search('The Adventures of Batwoman')
>>> mo2.group()
'Batwoman'

La parte (wo)? de la expresión regular significa que el patrón wo es un grupo opcional. La expresión regular coincidirá con el texto que tenga cero instancias o una instancia de wo en él. Por eso la expresión regular coincide con «Batwoman» y «Batman».

Utilizando el ejemplo del número de teléfono anterior, puede hacer que la expresión regular busque números de teléfono que tengan o no un código de área. Introduzca lo siguiente en el shell interactivo:

>>> phoneRegex = re.compile(r'(\d\d\d-)?\d\d\d-\d\d\d\d')
>>> mo1 = phoneRegex.search('My number is 415-555-4242')
>>> mo1.group()
'415-555-4242'

>>> mo2 = phoneRegex.search('My number is 555-4242')
>>> mo2.group()
'555-4242'

Puedes pensar en el ? como si dijera: «Coincide con cero o uno de los grupos que preceden a este signo de interrogación«.

Si necesita que coincida con un carácter de signo de interrogación real, escápelo con \?

Deja una respuesta