¿Regex grupo de problemas nombre redefinición?

Así que tengo esta expresión regular:

(^(\s+)?(?P(\w)(\d{7}))((01f\.foo)|(\.bar|\.goo\.moo\.roo))$|(^(\s+)?(?PR1_\d{6}_\d{6}_)((01f\.foo)|(\.bar|\.goo\.moo\.roo))$)) 

Ahora si trato de hacer un partido contra esto:

 B048661501f.foo

Me sale este error:

   Archivo "C: \ Python25 \ lib \ re.py", línea 188, en comstackción
     return _compile (patrón, banderas)
   Archivo "C: \ Python25 \ lib \ re.py", línea 241, en _compile
     error de subida, v # expresión no válida
 sre_constants.error: redefinición del nombre de grupo 'NAME' como grupo 9;  fue el grupo 3

Si no puedo definir el mismo grupo dos veces en la misma expresión de expresiones regulares para dos casos diferentes, ¿qué debo hacer?

No, no puedes tener dos grupos del mismo nombre, esto de alguna manera desafiaría el propósito, ¿no es así?

Lo que probablemente realmente quieres es esto:

 ^\s*(?P\w\d{7}|R1_(?:\d{6}_){2})(01f\.foo|\.(?:bar|goo|moo|roo))$ 

He refaccionado su expresión regular en la medida de lo posible. Hice los siguientes supuestos:

Quieres (corrigeme si me equivoco):

  • ignorar el espacio en blanco al comienzo de la cadena
  • coincide con cualquiera de los siguientes en un grupo llamado “NOMBRE”:
    • una letra seguida de 7 dígitos, o
    • "R1_" , y dos veces (6 dígitos + "_" )
  • seguido de cualquiera
    • "01f.foo" o
    • "." y ( "bar" o "goo" o "moo" o "roo" )
  • seguido por el final de la cadena

También podrías haber querido decir:

 ^\s*(?P\w\d{7}01f|R1_(?:\d{6}_){2})\.(?:foo|bar|goo|moo|roo)$ 

Cual es:

  • ignorar el espacio en blanco al comienzo de la cadena
  • coincide con cualquiera de los siguientes en un grupo llamado “NOMBRE”:
    • una letra seguida de 7 dígitos y “01f”
    • "R1_" , y dos veces (6 dígitos + "_" )
  • un punto
  • "foo" , "bar" , "goo" , "moo" o "roo"
  • el final de la cadena

Reusar el mismo nombre tiene sentido en su caso, contrariamente a la respuesta de Tamalak.

Tu expresión regular se comstack con python2.7 y también re2. Quizás este problema haya sido resuelto.