Expresión regular para devolver texto entre paréntesis

Resuelto user469652 asked hace 13 años • 10 respuestas
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

Todo lo que necesito es el contenido dentro del paréntesis.

user469652 avatar Feb 04 '11 09:02 user469652
Aceptado

Si su problema es realmente así de simple, no necesita expresiones regulares:

s[s.find("(")+1:s.find(")")]
tkerwin avatar Feb 04 '2011 03:02 tkerwin

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'"
waan avatar Feb 04 '2011 02:02 waan

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']
TheSoulkiller avatar Jul 10 '2015 14:07 TheSoulkiller

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 rfindpara la segunda parte de la operación, por lo que se convertiría en

st[st.find("(")+1:st.rfind(")")]
FaustoW avatar Nov 25 '2016 20:11 FaustoW
import re

fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )
Anonymous avatar Feb 04 '2011 03:02 Anonymous