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 \?