u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Tutto ciò di cui ho bisogno è il contenuto tra parentesi.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
e semplicemente non sa che esiste.
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Tutto ciò di cui ho bisogno è il contenuto tra parentesi.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
e semplicemente non sa che esiste.
Risposte:
Se il tuo problema è davvero solo così semplice, non hai bisogno di regex:
s[s.find("(")+1:s.find(")")]
Se vuoi trovare tutte le occorrenze:
>>> re.findall('\(.*?\)',s)
[u"(date='2/xc2/xb2',time='/case/test.png')", u'(eee)']
>>> re.findall('\((.*?)\)',s)
[u"date='2/xc2/xb2',time='/case/test.png'", u'eee']
.*
è avido (prenderà la partita più lunga) e .*?
non è avido (prenderà la partita più breve)
Basandosi sulla risposta di tkerwin, se ti capita di avere parentesi nidificate come in
st = "sum((a+b)/(c+d))"
la sua risposta non funzionerà se è necessario prendere tutto tra la prima parentesi aperta e l' ultima parentesi chiusa per ottenere (a+b)/(c+d)
, perché trova la ricerca dalla sinistra della stringa e si ferma alla prima parentesi chiusa.
Per risolvere questo problema, è necessario utilizzare rfind
per la seconda parte dell'operazione, quindi diventerebbe
st[st.find("(")+1:st.rfind(")")]
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
print(contents_re.groupdict()['contents'])