2011-02-04 4 views
52
u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')' 

전체 내용은 괄호 안의 내용입니다.괄호 사이에 텍스트를 반환하는 정규 표현식

+0

브래킷이 될 것인가? 나는 괄호가 보이지 않는다. 괄호? – kzh

+2

큰 따옴표를 쓰지 않는 이유는 무엇입니까? 'u'abcde (date = '2/xc2/xb2', time = '/ case/test.png') " – kzh

+0

이 질문을 읽는 것만으로도 신경 쓰이게됩니다. 나는 몰래 의혹을 듣는다. OP * 정말로 * ast에서 기능을 원하고 그것이 존재한다는 것을 모른다. – Kevin

답변

131

, 당신은 정규식이 필요하지 않습니다 :

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

'('및 ')'이 없으면 어떻게됩니까? 당신은 s [0 : -1]을 얻을 것입니다. 즉, 's': \에 무엇이든지 생길 것입니다. 문자열에 괄호가 먼저 있는지 확인하면 좋을 것입니다. – Omar

+1

"(일부 텍스트 (일부 괄호 안의 텍스트)에 더 많은 텍스트가 포함될 경우)"? –

+0

그런 다음 문제는 원래 문제만큼 간단하지 않으며 다른 해결 방법이 필요합니다. – tkerwin

28

사용 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'" 
2
import re 

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

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

모든 발행 수를 찾으려면 :

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

tkerwin 's 대답은, 당신은 같은 괄호를 중첩 한 일이면에

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

당신이 (a+b)/(c+d)를 얻기 위해 여는 괄호마지막 닫는 괄호 사이에 모든 것을 수행해야하는 경우 그의 대답이 작동하지 않습니다 왜냐하면 find는 문자열의 왼쪽부터 검색을하고 첫 번째 닫는 괄호에서 멈추기 때문입니다.

는 문제를 해결하려면, 당신은 작업의 두 번째 부분에 대한 rfind를 사용해야합니다, 그래서

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