Регулярное выражение для возврата текста в скобках - PullRequest
81 голосов
/ 04 февраля 2011
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')'

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

Ответы [ 5 ]

197 голосов
/ 04 февраля 2011

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

s[s.find("(")+1:s.find(")")]
48 голосов
/ 04 февраля 2011

Использование 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'"
29 голосов
/ 10 июля 2015

Если вы хотите найти все случаи:

>>> 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']
18 голосов
/ 25 ноября 2016

Опираясь на ответ tkerwin, если у вас есть вложенные скобки, как в

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

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

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

st[st.find("(")+1:st.rfind(")")]
6 голосов
/ 04 февраля 2011
import re

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

print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...