正则expression式在括号之间返回文本

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

我所需要的是括号内的内容。

如果你的问题真的只是这么简单,你不需要regex:

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

使用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'" 

如果你想find所有的发生:

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

build立在tkerwin的答案上,如果你碰巧嵌套括号

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

如果你需要把 (a+b)/(c+d)括号最后 (a+b)/(c+d)括号之间的所有内容都拿到(a+b)/(c+d) ,他的回答将不起作用,因为从string左边查找search,并停止在第一个右括号。

要解决这个问题,你需要使用rfind进行操作的第二部分,所以它会变成

 st[st.find("(")+1:st.rfind(")")] 
 import re fancy = u'abcde(date=\'2/xc2/xb2\',time=\'/case/test.png\')' print re.compile( "\((.*)\)" ).search( fancy ).group( 1 )