2011-05-05 20 views
18

Estoy analizando un archivo y buscando en las líneas username-# donde el nombre de usuario cambiará y puede haber cualquier número de dígitos [0-9] después del guión.Usando variables en la expresión regular de Python

He intentado casi todas las combinaciones tratando de usar la variable username en la expresión regular.

¿Estoy cerca de algo así como re.compile('%s-\d*'%user)?

Respuesta

19

funciona como debiera:

>>> user = 'heinz' 
>>> import re 
>>> regex = re.compile('%s-\d*'%user) 
>>> regex.match('heinz-1') 
<_sre.SRE_Match object at 0x2b27a18e3f38> 
>>> regex.match('heinz-11') 
<_sre.SRE_Match object at 0x2b27a2f7c030> 
>>> regex.match('heinz-12345') 
<_sre.SRE_Match object at 0x2b27a18e3f38> 
>>> regex.match('foo-12345') 
+0

Me siento realmente estúpido ahora. Entonces, ¿por qué es que cuando intento crearlo en un salto pdb me da un error de sintaxis? – utahwithak

+2

¿Qué ??????????? –

+0

En el depurador de Python, no me dejaba crearlo cuando estaba entrando. ¿No es el depurador un intérprete de Python normal? http://docs.python.org/library/pdb.html – utahwithak

0

¿Qué hay de:

re.compile(user + '-\d*') 
+0

¿Dónde debería ser diferente de la expresión original ??? –

2

Se puede crear la cadena mediante .formato() de cadena:

re.compile('{}-\d*'.format(user)) 
3

Sí, concatenar regex usted mismo, o use el formato de cadenas. Pero no olvides usar re.escape() si tu variable puede contener caracteres que tengan un significado especial en expresiones regulares.

Cuestiones relacionadas