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

[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 pythonimport retext = '''<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