Подтвердить что ты не робот

Регулярное выражение для возврата текста между скобками

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

Все, что мне нужно, это содержимое внутри скобки.

4b9b3361

Ответ 1

Если ваша проблема действительно такая простая, вам не нужно регулярное выражение:

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

Ответ 2

Используйте 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'"

Ответ 3

Если вы хотите найти все вхождения:

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

Ответ 4

На основе ответа tkerwin, если у вас есть вложенные круглые скобки, например, в

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

его ответ не будет работать, если вам нужно взять все между первой открывающей скобкой и последней закрывающей круглой скобкой, чтобы получить (a+b)/(c+d), потому что искать поиски слева строки и остановится в первой закрывающей скобке.

Чтобы исправить это, вам нужно использовать rfind для второй части операции, поэтому она станет

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

Ответ 5

import re

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

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