免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3087 | 回复: 12
打印 上一主题 下一主题

python正则匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-24 09:14 |只看该作者 |倒序浏览
本帖最后由 八月飞霜 于 2013-04-24 09:16 编辑

我想匹配<table>标签之间的代码,但是我这个程序每次都执行单行匹配,如何进行多行匹配 也就是说 将<table>和</table>
写在一行就可以匹配中间的内容 多行就不行

txt文件里面的html代码
  1. <table class="protomers" summary="Properties of various protomer conformations of 80466">
  2.      <tbody>
  3.         <tr>
  4.             <th class="type">
  5.                 <small>Type</small>
  6.                 <big>pH&nbsp;range</big>
  7.             </th>
  8.             <td class="download">
  9.                 &darr;
  10.                 <ul>
  11.                     <li><a href="http://zinc11.docking.org/fget.pl?l=0&z=8987822&f=m" title="Download MOL2 File">
  12.                         MOL2</a></li>
  13.                     <li><a href="http://zinc11.docking.org/fget.pl?l=0&z=8987822&f=d" title="Download SDF File">
  14.                         SDF</a></li>
  15.                     <li><a href="http://zinc11.docking.org/fget.pl?l=0&z=8987822&f=s" title="Download SMILES File">
  16.                         SMILES</a></li>
  17.                     <li><a href="http://zinc11.docking.org/fget.pl?l=0&z=8987822&f=h" title="Download Flexibase File">
  18.                         Flexibase</a></li>
  19.                 </ul>   
  20.             </td>
  21.         </tr>
  22.             </tbody>
  23. </table>
复制代码
python程序
  1. #!/usr/bin/python
  2. import re

  3. myfile=open('te.txt','r')
  4. m_file=myfile.read()
  5. #print m_file
  6. pattern=re.compile(r'<table .*?>(.*?)</table>')

  7. if re.search(pattern,m_file):
  8.         print 'found it'
  9. else:
  10.         print 'not fount'

  11. text=pattern.findall(m_file)

  12. print text
复制代码
麻烦大家看看,在线等!

论坛徽章:
0
2 [报告]
发表于 2013-04-24 09:18 |只看该作者
感觉没有匹配换行符呢?

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
3 [报告]
发表于 2013-04-24 09:27 |只看该作者
回复 1# 八月飞霜


    这个你考虑错了方向,正确不是用re模块,而是用HTMLParser模块,具体的内容,请参看HTMLParser模块
    用恰当的工具解决问题,事半功倍

论坛徽章:
0
4 [报告]
发表于 2013-04-24 09:31 |只看该作者
回复 3# jeppeter

很有可能。
但是txt文件里面是html代码,应该也能用re模块读取吧?


   

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
5 [报告]
发表于 2013-04-24 09:47 |只看该作者
回复 4# 八月飞霜


    不是不行,而是你在自己重复劳动,已经有人帮你把问题解决了,那你就不要DIY(don't  invent yourself).

论坛徽章:
0
6 [报告]
发表于 2013-04-24 09:48 |只看该作者
本帖最后由 八月飞霜 于 2013-04-24 09:50 编辑

回复 5# jeppeter

主要是练习正则,我看了那个链接,貌似<table>标签之间的其他html代码不能读出来呢,还是我看错了。


   

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
7 [报告]
发表于 2013-04-24 09:54 |只看该作者
回复 6# 八月飞霜


    如果真要,你就用re.MULTILINE 在re.compile的时候,这个可以满足你的要求。但我给你一个建议,最好的练习是以实际的一个需求为基础。

论坛徽章:
0
8 [报告]
发表于 2013-04-24 10:08 |只看该作者
回复 7# jeppeter
好的,我测试用了下HTMLParser 但是table之间的html代码没有读出来 都是标签之间的内容啊 我是想把<table>之间的内容都读出来  不管代码还是其他的。

   

论坛徽章:
0
9 [报告]
发表于 2013-04-24 10:22 |只看该作者
回复 7# jeppeter
re.MULTILINE 不能够实现啊,<table>之间的内容还是不能匹配出来。疯掉了。


   

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
10 [报告]
发表于 2013-04-24 10:22 |只看该作者
回复 1# 八月飞霜
  1. myfile=open('te.txt','r')
  2. m_lines=myfile.readlines()
  3. m_file=''.join(m_lines)
  4. print 'm_file %s'%(m_file)
  5. #print m_file
  6. pattern=re.compile(r'<table .*?>(.*?)</table>',re.MULTILINE | re.DOTALL)

  7. if pattern.search(m_file):
  8.         print 'found it'
  9. else:
  10.         print 'not fount'

  11. text=pattern.findall(m_file)

  12. print text
复制代码
这个测试过,可以解决你的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP