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

我所需要的只是括號內的內容。在括號之間返回文本的正則表達式

+0

支架?我沒有看到任何括號。你的意思是括號嗎? – kzh 2011-02-04 02:59:08

+2

爲什麼不使用雙引號?它會使字符串更容易閱讀,即'u'abcde(date ='2/xc2/xb2',time ='/ case/test.png')'` – kzh 2011-02-04 03:01:41

回答

131

如果您的問題真的如此簡單,你不需要正則表達式:

s[s.find("(")+1:s.find(")")] 
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)他的回答是行不通的,因爲從字符串的左側查找搜索,並停止在第一個右括號處。

爲了解決這個問題,你需要使用rfind爲操作的第二部分,所以它會成爲

st[st.find("(")+1:st.rfind(")")] 
相關問題