[Python-es] expresiones regulares

Hernan Martinez Foffani hernan en orgmf.com.ar
Mie Jul 31 16:59:35 CEST 2002


> 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.

supongo que te referís a las regexp de python, no? las que se
usan con:
  import re

> un ejemplo de lo que le quiero pasar es: 'linux or (sun and bsd)'

hice la pregunta anterior porque esa no es una expresion regular
valida.  en realidad, sí es, pero no hace lo que vos queres.
el equivalente sería:

  'linux|sun.*bsd|bsd.*sun'
>>> x = re.search('linux|sun.*bsd|bsd.*sun',
                  'asdfl sun laksd bsdfl')
>>> x.start()
6
>>> x.end()
19
>>>

> 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))'

para recuperar lo que hay dentro de los parentesis usa
\numero, ej. \1, \2 etc.
el numero refiere al correspondiente parentesis de apertura
en la expresion:
  '(sun.*[(www|http)])'
   1      2

>>> x = re.search('(sun.*[(www|http)])',
	      'lasdfkasdflk sun alsf www asldfalsfd')
>>> x.start()
13
>>> x.end()
25
>>>

pero esta ultima expresion no encuentra strings que contengan
primero 'www' y luego 'sun'

mas informacion en:
http://py-howto.sourceforge.net/regex/regex.html

saludos,
-Hernan





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