El método findall() en las expresiones regulares Python

Además del método search(), los objetos Regex también tienen un método findall(). Mientras que search() devolverá un objeto Match del primer texto coincidente en la cadena buscada, el método findall() devolverá las cadenas de cada coincidencia en la cadena buscada. Para ver cómo search() devuelve un objeto Match sólo en la primera instancia de texto coincidente, introduzca lo siguiente en el shell interactivo:

>>> import re
>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
>>> mo = phoneNumRegex.search('Cell: 415-555-9999 Work: 212-555-0000')
>>> mo.group()
'415-555-9999'

Por otro lado, findall() no devolverá un objeto Match sino una lista de cadenas, siempre que no haya grupos en la expresión regular. Cada cadena de la lista es una parte del texto buscado que coincide con la expresión regular. Introduzca lo siguiente en el shell interactivo:

>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') # has no groups
>>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')
['415-555-9999', '212-555-0000']

Si hay grupos en la expresión regular, findall() devolverá una lista de tuplas. Cada tupla representa una coincidencia encontrada, y sus elementos son las cadenas coincidentes de cada grupo de la expresión regular. Para ver findall() en acción, introduzca lo siguiente en el intérprete de comandos interactivo (observe que la expresión regular que se está compilando ahora tiene grupos entre paréntesis):

>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)') # has groups
>>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')
[('415', '555', '9999'), ('212', '555', '0000')]

Para resumir lo que devuelve el método findall(), recuerde lo siguiente:

  • Cuando se llama a un regex sin grupos, como \d\d\d-\d\d\d-\d\d\d\d, el método findall() devuelve una lista de coincidencias de cadenas, como ['415-555-9999', '212-555-0000'].
  • Cuando se llama a una regex que tiene grupos, como (\d\d\d)-(\d\d\d)-(\d\d\d\d), el método findall() devuelve una lista de tuplas de cadenas (una cadena por cada grupo), como [('415', '555', '9999'), ('212', '555', '0000')].

Deja una respuesta