¿Por qué re.groups () no me da nada para mi grupo que coincide correctamente?

Cuando corro este código:

print re.search(r'1', '1').groups() 

Obtengo un resultado de () . Sin embargo, .group(0) me da el partido.

¿No deberían los groups() darme algo que contenga el partido?

Actualización: Gracias por las respuestas. ¿Eso significa que si hago re.search() sin subgrupos, tengo que usar groups(0) para obtener una coincidencia?

los grupos están vacíos ya que no tiene grupos de captura: http://docs.python.org/library/re.html#re.MatchObject.groups . El grupo (0) siempre devuelve el texto completo que se comparó, independientemente de si se capturó en un grupo o no.

Editado

Que yo sepa, .groups() devuelve una tupla de grupos recordados . Es decir, aquellos grupos en la expresión regular que están entre paréntesis. Así que si tuvieras que escribir:

 print re.search(r'(1)', '1').groups() 

obtendrías

 ('1',) 

como tu respuesta En general, .groups() devolverá una tupla de todos los grupos de objetos en la expresión regular que están entre paréntesis.

La razón de esto es que no tiene grupos de captura (ya que no usa () en el patrón). http://docs.python.org/library/re.html#re.MatchObject.groups

Y el group(0) devuelve el resultado de búsqueda completo (incluso si no tiene ningún grupo de captura): http://docs.python.org/library/re.html#re.MatchObject.group

No tiene grupos en su expresión regular, por lo tanto, obtiene como resultado una lista vacía ( () ).

Tratar

 re.search(r'(1)', '1').groups() 

Con los corchetes que está creando un grupo de captura, el resultado que coincide con esta parte del patrón, se almacena en un grupo.

Entonces tienes

 ('1',) 

como resultado.