Expresión regular para devolver texto entre paréntesis
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Todo lo que necesito es el contenido dentro del paréntesis.
Aceptado
Si su problema es realmente así de simple, no necesita expresiones regulares:
s[s.find("(")+1:s.find(")")]
Usar re.search(r'\((.*?)\)',s).group(1)
:
>>> import re
>>> s = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
>>> re.search(r'\((.*?)\)',s).group(1)
u"date='2/xc2/xb2',time='/case/test.png'"
Si desea encontrar todas las ocurrencias:
>>> re.findall(r"\(.*?\)", s)
[u"(date='2/xc2/xb2',time='/case/test.png')", u'(eee)']
>>> re.findall(r"\((.*?)\)", s)
[u"date='2/xc2/xb2',time='/case/test.png'", u'eee']
Basándose en la respuesta de tkerwin, si tiene paréntesis anidados como en
st = "sum((a+b)/(c+d))"
su respuesta no funcionará si necesita tomar todo entre el primer paréntesis de apertura y el último paréntesis de cierre para obtener (a+b)/(c+d)
, porque buscar busca desde la izquierda de la cadena y se detendría en el primer paréntesis de cierre.
Para solucionarlo, debe utilizarlo rfind
para la segunda parte de la operación, por lo que se convertiría en
st[st.find("(")+1:st.rfind(")")]
import re
fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )