¿Hay alguna manera de recuperar un patrón dentro de una expresión regular en Python? p.ej.:

StrA = '\ ta - b'

Y me gustaría recuperar 'a' y 'b' en diferentes variables

0
Rogger Fernandes 28 ago. 2014 a las 01:34

2 respuestas

La mejor respuesta

Parece que estás hablando de guardar / capturar grupos:

>>> import re
>>> pattern = r"\t(\w+) -- (\w+)"
>>> s = '       test1 -- test2'
>>> a, b = re.search(pattern, s).groups()
>>> a
'test1'
>>> b
'test2'
1
alecxe 27 ago. 2014 a las 21:38

No puede recuperar un patrón , puede hacer coincidir o recuperar un captura de contenido del grupo que coincida con su patrón.

Siguiendo tu ejemplo:

\ta -- b

Si desea recuperar el contenido, puede usar grupos de captura usando paréntesis como:

\t(a) -- (b)

Regular expression visualization

La explicación de expresiones regulares para esto es:

\t                       '\t' (tab)
(                        group and capture to \1:
  a                        'a'
)                        end of \1
 --                      ' -- '
(                        group and capture to \2:
  b                        'b'
)                        end of \2

Entonces podrá obtener el contenido del grupo accediendo a través de su índice como \1 (o $1) y el grupo \2 (o $2). Pero vas a tomar el contenido coincidente, no el patrón en sí.

Entonces, si tienes:

\t(\w) -- (\d)

Regular expression visualization

Tomaría contenido que coincida con ese patrón:

\t                       '\t' (tab)
(                        group and capture to \1:
  \w                       word characters (a-z, A-Z, 0-9, _)
)                        end of \1
 --                      ' -- '
(                        group and capture to \2:
  \d                       digits (0-9)
)                        end of \2

Pero no puede recuperar \w o \d en sí mismo.

Si quieres obtener los patrones para esto:

\t\w -- \d

Debería dividir la cadena anterior por -- y obtendría cadenas ::

"\t\w "
" \d"
0
Federico Piazza 27 ago. 2014 a las 22:02