u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Potrzebuję tylko zawartości w nawiasach.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
i po prostu nie wie, że istnieje.
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Potrzebuję tylko zawartości w nawiasach.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
i po prostu nie wie, że istnieje.
Odpowiedzi:
Jeśli twój problem jest naprawdę prosty, nie potrzebujesz wyrażenia regularnego:
s[s.find("(")+1:s.find(")")]
Jeśli chcesz znaleźć wszystkie wystąpienia:
>>> 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']
.*
jest chciwy (najdłuższy mecz) i .*?
nie jest chciwy (wybierze najkrótszy mecz)
Opierając się na odpowiedzi tkerwina, jeśli zdarzy się, że masz zagnieżdżone nawiasy, takie jak w
st = "sum((a+b)/(c+d))"
Jego odpowiedź nie będzie działać, jeśli trzeba wziąć wszystko pomiędzy pierwszym otwierającym nawiasie i ostatniego zamknięcia nawiasu do uzyskania (a+b)/(c+d)
, ponieważ wyszukiwania Znajdź z lewej strony napisu, a zatrzyma przy pierwszym zamykającym nawiasie.
Aby to naprawić, musisz użyć rfind
do drugiej części operacji, aby tak się stało
st[st.find("(")+1:st.rfind(")")]
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
print(contents_re.groupdict()['contents'])