今天有遇到要匹配网页的table元素里面的内容,部分内容为
<tr >
<td>60</td>
<td><a>leeliao</a></td>
<td><a>leeliao</a></td>
<td>¥56.82 元</td>
<td>¥56.82元</td>
<td>2014-08-11 23:33:54</td>
<td>手动</td>
<td><div class='iconBidState0' /></td>
</tr>
<tr >
<td>61</td>
<td><a>luo321654</a></td>
<td><a>luo321654</a></td>
<td>¥4,000.00 元</td>
<td>¥4,000.00元</td>
<td>2014-08-11 23:34:32</td>
<td>手动</td>
<td><div class='iconBidState0' /></td>
</tr>
我想要匹配每一个<tr>里面的头两个<td>,用python的正则加findall函数便可实现。但是要想获取类似字典一样的匹配(即可以通过group('key')类似的形式获取值得话),我需要对正则进行进一步改造。
我写的正则为
r'''<td>(?P<number>\d+)</td>.*?<td><a>(?P<name>\w+)</a></td'''
(?P<name>...)的形式是用命名的形式分组,可以生成对应name的字典
实现功能的全部代码是
r = re.compile(r'''<td>(?P<number>\d+)</td>.*?<td><a>(?P<name>\w+)</a></td''', re.S)
result = re.finditer(r, content)
print [m.groupdict() for m in result]
[{'number': '60', 'name': 'leeliao'}, {'number': '61', 'name': 'luo321654'}]
这里的groupdict是返回匹配到的所有命名子组的字典,至于为什么不用findall呢,这是因为findall最后返回的是匹配到的字符元组,类似
[('60', 'leeliao'), ( '61', 'luo321654')]
而finditer返回一个正则匹配的一个对象。
具体可以参考http://stackoverflow.com/questions/3765024/different-behavior-between-re-finditer-and-re-findall
正则是一个强大的工具,需要我慢慢摸索学习,以此文记录学习的过程。
有错漏之处,欢迎指正。
参考文章:
http://junlee.blog.51cto.com/228061/555895
https://docs.python.org/2/library/re.html
本文记录了使用Python正则表达式匹配网页table元素内容的学习过程。通过示例代码展示了如何进行匹配,并提供了相关参考资料链接,旨在探讨正则在文本处理中的应用。
465

被折叠的 条评论
为什么被折叠?



