u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Ich brauche nur den Inhalt in Klammern.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
und einfach nicht weiß, dass sie existiert.
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'
Ich brauche nur den Inhalt in Klammern.
u"abcde(date='2/xc2/xb2',time='/case/test.png')"
ast
und einfach nicht weiß, dass sie existiert.
Antworten:
Wenn Ihr Problem wirklich so einfach ist, brauchen Sie keinen regulären Ausdruck:
s[s.find("(")+1:s.find(")")]
Wenn Sie alle Vorkommen finden möchten:
>>> 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']
.*
es gierig ist (wird das längste Match dauern) und .*?
nicht gierig ist (wird das kürzeste Match nehmen)
Aufbauend auf der Antwort von tkerwin, wenn Sie zufällig verschachtelte Klammern wie in haben
st = "sum((a+b)/(c+d))"
Seine Antwort funktioniert nicht, wenn Sie alles zwischen der ersten öffnenden Klammer und der letzten schließenden Klammer nehmen müssen (a+b)/(c+d)
, um zu suchen, da Suchanfragen links von der Zeichenfolge gefunden werden und bei der ersten schließenden Klammer aufhören würden.
Um dies zu beheben, müssen Sie rfind
für den zweiten Teil der Operation verwenden, damit es wird
st[st.find("(")+1:st.rfind(")")]
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
print(contents_re.groupdict()['contents'])