Python 返回括号之间文本的正则表达式

Python 返回括号之间文本的正则表达式,python,regex,python-3.x,Python,Regex,Python 3.x,我只需要括号内的内容。使用re.search(r'\(.*?)\),s)。组(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'"

我只需要括号内的内容。

使用
re.search(r'\(.*?)\),s)。组(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'"

如果要查找所有事件,请执行以下操作:

import re

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

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

基于tkerwin的答案,如果你碰巧有嵌套的括号,比如

>>> 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']
如果您需要从第一个开始括号最后一个结束括号之间获取
(a+b)/(c+d)
,则他的答案将不起作用,因为find从字符串的左侧搜索,并将在第一个结束括号处停止

要解决这个问题,您需要对操作的第二部分使用
rfind
,这样它就变成

st = "sum((a+b)/(c+d))"
contents\u re=re.match(r'[^\(]*\(?P[^\(]+)\'),数据)
如果内容是:
打印(内容\u re.groupdict()['contents'])
无需使用正则表达式。。。。 只需使用列表切片

contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
    print(contents_re.groupdict()['contents'])

括号?我看不到任何括号。你是指括号吗?为什么不使用双引号?这会使字符串更易于阅读,即
u“abcde(date='2/xc2/xb2',time=''/case/test.png')”
这个问题一看就让我紧张。我暗自怀疑OP真的想要
ast
中的功能,只是不知道它的存在。如果没有“(”和“)”?你会得到s[0:-1]。这意味着您将在“s”中得到任何内容:\。如果您先检查字符串是否有括号就好了。如果您有“(一些文本(内括号中的一些文本)还有一些文本怎么办?”?那么这个问题就没有原来的问题那么简单了,需要一个不同的解决方案。对于Igor的问题:如果你有这样的嵌套括号,那么你可以在操作的第二部分使用rfind。有关这个问题的详细信息,请参阅我下面的文章。这可能是一个愚蠢的问题,但是为什么需要“?”呢?为什么需要“(.*)”不行?@CutePoison因为
*
贪婪(将进行最长的匹配)而
*?
不贪婪(将进行最短的匹配)谢谢!可能是整晚最好的答案!@ALH该表达式没有嵌套的括号,这正是我的答案的好处。虽然这段代码可以回答这个问题,但提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值这是9年前发布的。
st = "sum((a+b)/(c+d))"
st[st.find("(")+1:st.rfind(")")]
contents_re = re.match(r'[^\(]*\((?P<contents>[^\(]+)\)', data)
if contents_re:
    print(contents_re.groupdict()['contents'])
string="(tidtkdgkxkxlgxlhxl) ¥£%#_¥#_¥#_¥#"
print(string[string.find("(")+1:string.find(")")])