[D]请求python的正则表达式匹配相关有关问题,求大神指点,

[D]请求python的正则表达式匹配相关问题,求大神指点,急
想用正则表达式去匹配抓取一个字段
但是这个字段匹配的时候是这样的规则:
假设字符串如下:
<table>....
<a id='22'>abc</a>
</table>
<table>....
<a id='22'>abc</a>
<b id='22'>abc</b>
</table>
目的是希望抓取每个table里符合<table>.*?<a id.*?>(.*?)</a>.*?</table>或者<table>.*?<a id.*?>(.*?)</a>.*?<b id='22'。*?>(.*?)</b>.*?</table>的数据,然后当是第一个table那种数据时获取abc,如果是第二种那种形式的话获取两个abc
当然目的是为了获取那三处abc的值。
但是我用<table>.*?<a id.*?>(.*?)</a>.*?[(<b id='22'。*?>(.*?)</b>)]+.*?</table>这样的正则表达式去抓取的时候发现有点小问题
我是这样做的
matches = pattern.finditer(s) ===》s是上述字符串内容
发现matches.groups只能为1,也就是说,接下来我用
for ele in matches :
  print ele.lastindex
  print ele.group(1)
只能调用group(1),也就是说只能获取到第一个abc,不能够当是第一个table的时候通过判断lastindex=1调用group(1)获取到abc,而当是第二种table数据时通过判断lastindex=2调用group(1),group(2)去获取到两个abc。

求教下python大神,这个怎么处理的?
本人晚上刚学python,可能有些地方描述不清楚,所以如果有疑问,麻烦指出来,我好再描述下,
谢谢,1点前在线等啊!

---------------------------
Double行动:
原帖分数:40
帖子加分:40




------解决方案--------------------
目的是为了获取那三处abc的值?
那就:
Python code
import re 

string = """
<table>....
<a id='22'>abc</a>
</table>
<table>....
<a id='22'>abcd</a>
<b id='22'>abcde</b>
</table>
"""
patten = "<\w id='22'>.+?</\w>"
temp_list = re.findall( patten , string)
for i in temp_list:
    print i.split('>')[1][:-3]

------解决方案--------------------
Python code
#!/usr/bin/env python

import re

text = '''
<d id='1'>i don't want to gei it</d>
<table>......</table>
<table>....
<d id='22'>sdfsdfs</d>
<a id='11'>i want get it 1</a>
</table>
<b id='333'>sdfvcxv</b>
<b id='333'>i don't want to gei it</b>
<table>....
<a id='11'>i want get it 2</a>
<b>sdfsdf</b>
<b id='333'>i want get it 3</b>
</table>
<b id='333'>i don't want to get it</b>
'''

#$text =~ s:\n::g;
#$text =~ s:(?<=</table>)(?=.):\n:gi;
#$text =~ s:^.*?(?=<table>)::gmi;
#$text =~ s:^((?!<table>).)*$::gmi;

tmp = text.replace("\n", "")
tmp = tmp.replace("</table>", "</table>\n");
tmp = re.sub(r'^.*?(?=<table)', '', tmp, flags = re.I | re.U | re.M)
tmp = re.sub(r'^((?!<table>).)*$', '', tmp, flags = re.I | re.U | re.M)

res = re.findall(r'''<(\w+) id='(?:11|333)'>([^<]*)</\1>''', tmp, re.I | re.U)
if res:
    res = [w[1] for w in res]
    print res