/ / Wyrażenie regularne, aby zwrócić tekst między nawiasami - python, regex, python-3.x

Wyrażenie regularne do zwracania tekstu między nawiasami - python, regex, python-3.x

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

Wszystko, czego potrzebuję, to zawartość w nawiasie.

Odpowiedzi:

152 dla odpowiedzi nr 1

Jeśli twój problem jest naprawdę taki prosty, nie potrzebujesz regex:

s[s.find("(")+1:s.find(")")]

35 dla odpowiedzi nr 2

Posługiwać się 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""

21 dla odpowiedzi nr 3

Jeśli chcesz znaleźć wszystkie zdarzenia:

>>> 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"]

9 dla odpowiedzi № 4

Opierając się na odpowiedzi tkaczy, jeśli zdarzy ci się mieć zagnieżdżone nawiasy jak w

st = "sum((a+b)/(c+d))"

jego odpowiedź nie zadziała, jeśli będziesz musiał zabrać wszystko między pierwszy otwierający nawias i ostatni, ubiegły, zeszły zamykający nawias dostać (a+b)/(c+d), ponieważ znajdź wyszukiwania z lewej strony łańcucha i zatrzyma się na pierwszym nawiasie zamykającym.

Aby to naprawić, musisz użyć rfind na drugą część operacji, tak by się stało

st[st.find("(")+1:st.rfind(")")]

3 dla odpowiedzi № 5
import re

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

print re.compile( "((.*))" ).search( fancy ).group( 1 )