正则表达式之{}匹配问题

正则表达式之{}匹配问题

现在需要用正则表达式抓取{和与其相匹配的}之间的内容,但是{}里面也可能出现{和}。
例如
{hello} 抓到 hello
{hello {me}} 抓到 hello {me}
如果这样做不到的话,内容里面的{}也可以添加转义符等,比如{hello \{me\}} 抓到 hello {me}或者抓到 hello \{me\} 后再将\去掉都行.
这样的正则表达式该如何写?
{}在python的正则表达式中是特殊字符,因此需要使用转义符。使用下面的语句:

import re
r = re.compile(r'\{(.*)\}')
b=r.search('asdfd{he{zzz}llo}sfsdf')
b.groups()
谢谢limodou。
不过'\{(.*)\}'抓到的是第一个{和最后一个}之间的内容,而不是{和与其相匹配的}之间的内容。
比如'{hello {me}} {test}',需要抓到hello {me},用'\{(.*)\}'结果抓到的是'hello {me}} {test'。
可以改为

r'\{(.*?)\}'

但对于'{hello {me}} {test}'匹配出来的就是:

'hello{me' 了。这种嵌套的不好处理。


QUOTE:
原帖由 limodou 于 2005-11-26 21:12 发表
{}在python的正则表达式中是特殊字符,因此需要使用转义符。使用下面的语句:

import re
r = re.compile(r'\{(.*)\}')
b=r.search('asdfd{he{zzz}llo}sfsdf')
b.groups()

python真神奇Y
神奇吗?就是正则表达式而已呀。
{}前不需要\的
这个有人搞出来了吗,光用正则表达式能搞出来吗?


[Copy to clipboard] [ - ]
CODE:
import string

mystring = '{hello{me}}{test}'
mylist = []
mywordlist = []
index = mystring.find('{')
mystart = index
while index<len(mystring):
  if mystring[index] != '}':
    mylist.append(mystring[index])
  else:
    index_j = index
    while index_j >= mystart:
      mychar = mylist.pop()
      index_j = index_j - 1
      if mychar != '{':
        mywordlist.append(mychar)
      else:
        mywordlist.reverse()
        print string.join(mywordlist,'')
        mywordlist.insert(0,'{')
        mywordlist.append('}')
        mywordlist.reverse()
        if len(mylist)==0:
          mywordlist = []
        break
  index = index + 1



[Copy to clipboard] [ - ]
CODE:
me
hello{me}
test

正则表达式我是搞不出来了,只能用这个方法了。

现有的正则表达式估计是不行的了,不知道以后的正则表达式能不能支持计算字符出现的次数。