[Python-es] expresiones regulares

Jose Alejandro Perez Rubio perezj en si.uji.es
Jue Ago 1 09:03:41 CEST 2002


On Wed, 2002-07-31 at 15:59, Attila Saorin wrote:
> buenas tardes,
> 
> estoy aqui, releyendome por segunda vez la documentacion de las expresiones regulares y, por
> ejemplo, no me queda claro como puedo sacar el contenido de algo que le pase entre parentesis.
> 
> un ejemplo de lo que le quiero pasar es: 'linux or (sun and bsd)'

No se si he entendido lo que preguntas, pero creo que esto te puede
ayudar:

import re

# los paréntesis no escapados delimitan un grupo
# al que luego accederemos mediante groups
 
a = re.compile( ".*\((.*)\).*" )      
b = a.match( 'linux or (sun and bsd)')

print b.groups()[0]
sun and bsd


> 
> entonces, quiero que por un lado, que lo que esta entre parentesis me lo coja por un lado y luego
> ya lo tratare yo. por cierto, que pasaria si hay varios parentesis anidados? '(sun and (www or
> http))'
> 

la cosa se complica, si lo que está entre paréntesis puede ser otros
paréntesis, deberíamos plantearnos si las expresiones regulares son lo
más adecuado. Si el problema es tan sencillo como se plantea
inicialmente (solo coger lo que se encuentra entre paréntesis) quizá
podría servir:

a = 'linux or (sun and bsd)'

p1 = a.find( '(' ) + 1
p2 = a.rfind( ')' )

if p1 != -1  and  p2 != -1  and  p1 < p2 :
  rdo = a[ p1 : p2 ]
else 
  rdo = ''

print rdo



> la funcion split es sencilla, pero provoca que me quiten la expresion que quiero comparar, pero me
> sirve para dividir el string, pero son las funciones search y match que no veo ni se como podria
> utilizarlas.
> 
> Gracias.
> 
> Attila
> 






Más información sobre la lista de distribución Python-es